题目来自剑指Offer之十六。

链表结点结构

  1. class ListNode{
  2. int value;
  3. ListNode next = null;
  4. public ListNode(int value){
  5. this.value = value;
  6. }
  7. }

题目描述

  • 输入一个链表的头结点,反转该链表并输出翻转后的头结点

代码实现

  • 遍历该链表
  • 保存后一个结点,以防止当前结点的next值更新后链表断开
  • 保存前一个结点,以便当前结点的next值更新为前一个结点
  • 最后一个结点将是反转之后的头结点,保存该结点返回

  1. public static ListNode reverseList(ListNode head) {
  2. ListNode reverseListHead = null;
  3. ListNode curNode = head;
  4. ListNode preNode = null;
  5. ListNode nextNode = null;
  6. while(curNode != null){
  7. nextNode = curNode.next;
  8. if(nextNode == null){
  9. reverseListHead = curNode;
  10. }
  11. curNode.next = preNode;
  12. preNode = curNode;
  13. curNode = nextNode;
  14. }
  15. return reverseListHead;
  16. }