题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
struct ListNode{
      int    m_nKey;
      ListNode*    m_pNext;
}

相当于有两条链表,从一条链表复制到另外一条链表中。
 
测试用例:
1)输入的链表头指针是null;
2)输入的链表只有一个结点;
3)输入的链表有多个结点。
 
代码实现:
package com.yyq;

/**
* Created by Administrator on 2015/9/13.
*/
public class ReverseList {
public static ListNode reverseList(ListNode pHead) {
ListNode pReversedHead = null;
ListNode pNode = pHead;
ListNode pPrev = null;
ListNode pNext = null;
while (pNode != null) {
pNext = pNode.getM_pNext(); //注意这里面的逻辑,如果把这句话放在while最后的话,会产生空指针异常
if (pNext == null) {
pReversedHead = pNode;
}
pNode.setM_pNext(pPrev);
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
} public static void printList(ListNode pListHead) {
if (pListHead == null)
return;
ListNode pNode = pListHead;
while (pNode != null) {
System.out.print(pNode.getM_nValue() + " ");
pNode = pNode.getM_pNext();
}
System.out.println();
} // ====================测试代码====================
public static ListNode Test(ListNode pHead) {
System.out.println("The original list is: ");
printList(pHead);
ListNode pReversedHead = reverseList(pHead);
System.out.println("The reversed list is: ");
printList(pReversedHead); return pReversedHead;
} // 输入的链表有多个结点
public static void Test1() {
ListNode pNode1 = new ListNode(1);
ListNode pNode2 = new ListNode(2);
ListNode pNode3 = new ListNode(3);
ListNode pNode4 = new ListNode(4);
ListNode pNode5 = new ListNode(5);
ListNode pNode6 = new ListNode(6); pNode1.setM_pNext(pNode2);
pNode2.setM_pNext(pNode3);
pNode3.setM_pNext(pNode4);
pNode4.setM_pNext(pNode5);
pNode5.setM_pNext(pNode6); Test(pNode1);
pNode1 = null;
} // 输入的链表只有一个结点
public static void Test2() {
ListNode pNode1 = new ListNode(1);
Test(pNode1);
pNode1 = null;
} // 输入空链表
public static void Test3() {
Test(null);
} public static void main(String[] args) {
Test1();
Test2();
Test3();
}
}
 
输出结果:
The original list is: 
1  2  3  4  5  6  
The reversed list is: 
6  5  4  3  2  1  
The original list is: 
1  
The reversed list is: 
1  
The original list is: 
The reversed list is: 

P112、面试题16:反转链表的更多相关文章

  1. 剑指offer-面试题16.反转链表

    题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的头结点 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; } 其实 ...

  2. 剑指Offer:面试题16——反转链表(java实现)

    问题描述 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的链表的头结点.链表结点如下: public class ListNode { int val; ListNode next = n ...

  3. 《剑指offer》面试题16 反转链表 Java版

    (输入链表的头节点,反转链表) 书中方法:对于一个链表,我们只能从头往后遍历,如果要反转,我们需要更改当前节点的next域指向前一个节点,此时链表断开,为了能继续修改下一个节点的next域,我们还要维 ...

  4. 《剑指offer》面试题16—反转链表

    Node* p1  p2  p3 思路:开始时,p1为NULL,p2=phead,p3=p2—>next.使p2—>next = p1,然后使p1=p2,p2=p3.如果只有1个结点则此时 ...

  5. 【剑指offer】面试题 24. 反转链表

    面试题 24. 反转链表

  6. 【剑指Offer】面试题24. 反转链表

    题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3 ...

  7. 《剑指offer》面试题24. 反转链表

    问题描述 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-> ...

  8. LeetCode 面试题24. 反转链表

    题目链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/ 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. ...

  9. 菜鸟系列 Golang 实战 Leetcode —— 面试题24. 反转链表

    定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点.   示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3- ...

  10. 【LeetCode】206. 反转链表

    题目 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可 ...

随机推荐

  1. [java学习笔记]java语言核心----面向对象之this关键字

    一.this关键字 体现:当成员变量和函数的局部变量重名时,可以使用this关键字来区别:在构造函数中调用其它构造函数 原理:         代表的是当前对象.         this就是所在函数 ...

  2. L006-oldboy-mysql-dba-lesson06

    L006-oldboy-mysql-dba-lesson06 数据清理状态,先标记update table state=1,再删除. myisam没外键,硬件,并发,锁表力度,不支持事务,OLAP. ...

  3. XML解析之PULL

    在Android中极力推荐的xmlpull方式解析xml. 为什么 STAX 解析方式 效率 好于 SAX ? 1.SAX 无选择性的,所有事件都会处理 解析方式,Stax 由用户控制需要处理事件类型 ...

  4. C#对象转JSON字符串和JSON字符串转对象

    namespace Net.String.ConsoleApplication { using System; using System.Data; using System.Collections; ...

  5. PHP连接局域网MYSQL数据库的简单实例

    PHP连接局域网MYSQL数据库的简单实例 [php] view plaincopy <?PHP /** * php连接mysql数据库 * by www.jbxue.com */ $conn= ...

  6. zhuan:ubuntu下安装Apache2+php+Mysql

    from: http://www.cnblogs.com/lynch_world/archive/2012/01/06/2314717.html ubuntu下安装Apache+PHP+Mysql 转 ...

  7. 在SAE上同步djanogo的mysql数据库

    折腾了一个下午,终于搞掂了把djanogo应用的mysql数据库导入到SAE上了,归根到底麻烦的根源是SAE限制多多.下面简单记录一下过程以备日后参考使用. 首先还是修改settings.py,把数据 ...

  8. FPGA串口波特率简析

    以前用单片机,一直都是直接用就行,设置波特率时,直接写9600就行,一直没有仔细考虑过,今天打算用FPGA写个串口程序时才知道,原来根本就是没弄明白.一下是我的一些见解.如果诸位看官觉得不对,欢迎指正 ...

  9. UI元素的相对自适应

    什么是UI元素的相对自适应 UI元素的相对自适应,顾名思义,是指两个UI元素之间保持一种相对的位置不要变化,例如,UI元素A永远处于UI元素B右边的50像素处位置.再比如,一个UI背景框,不论屏幕尺寸 ...

  10. ORA-01034:oracle不可用 的解决方法

    晚上打开SQLPlus输入用户名和密码老是登不了,出现如上一行代码 "ORA-01034:ORACLE不可用"的错误 解决思路: 1.检查服务是否启动, 2.如果已经启动,说明数据 ...