题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
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. how to Enable Client Integration

    i got a problem,the problem is list cant use export to excel button in sharepoint 2010. I found my a ...

  2. TFS遇到TF14446错误的解决方法

    先上图 使用TFS,之前遇到文件被删除直接获取最新版本就行了,今天遇到这个异常:[TF14446: 无法签出“$/****/****/**/Models.pdb”以进行编辑.您的客户端或团队项目配置为 ...

  3. encodeURIComponent=>Uri.EscapeDataString

    javascript: encodeURIComponent=> C#: Uri.EscapeDataString http://stackoverflow.com/questions/5754 ...

  4. web组件新学--layer

    在之前项目后台管理界面开发中,不知道有layer这样好用的组件,我的内心是这样的的...呀!这个框架有弹框,哈哈哈,好开心,不用自己写遮罩层,不用自己写弹框,好开森.. 当知道有layer之后.... ...

  5. 看几道JQuery试题后总结(上篇)

    无意中拿到的JQuery题目,拿来分享顺便总结总结 在JQuery对象中区分.text();.val();.html();.innerHTML;.innerTEXT()的用法与区别,用例子证明 在JQ ...

  6. 利器: 用Siege做Web服务器压测

    用「Web压测」关键词检索,能找到好多进行压测的工具,比如ab.Http_load.Webbench.Siege这些,不过今天并不是要对这些工具做对比,毕竟我们只是想得到一个结果.本文主要介绍Sieg ...

  7. html5 全屏滚动活动页学习

    先看几个具体的实例: 1.腾讯娱乐:http://ent.qq.com/zt2014/qqent/h5.htm?from=groupmessage&isappinstalled=0 2.苏宁互 ...

  8. [译]servlet3.0与non-blocking服务端推送技术

    Non-blocking(NIO)Server Push and Servlet 3 在我的前一篇文章写道如何期待成熟的使用node.js.假定有一个框架,基于该框架,开发者只需要定义协议及相关的ha ...

  9. 去掉iphone手机滑动默认行为

    /*去掉iphone手机滑动默认行为*/ $('body').on('touchmove', function (event) { event.preventDefault(); });

  10. iOS 通览(一) - 技巧、特性及规范

    一.编译器特性 1.ARC. ARC是编译器特性.项目中使用了ARC,编译器会在项目编译的时候自动添加OC对象计数器release代码.并且使用了ARC,项目中将不允许出现release.retain ...