leecode206:反转链表

78 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
pre = null
cur = 1
cur.next修改前是2,修改后是null
pre = 1
cur = 2
依次推倒
cur.next修改前是3,修改后是2
pre = 2
cur = 3
...
题解
  • 一定要定义三个节点指针
  • 临时节点永远指向当前节点的下一个节点
  • 循环中步骤
    • 定义临时节点
    • 修改cur.next指针指向,将其指向pre
    • pre向后移动一位
    • cur向后移动一位 在这里插入图片描述
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
 
 class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head;
        ListNode newHead = null;
        while(cur != null) {
            // 暂存后继节点 cur.next
            ListNode next = cur.next; 
            // cur.next指针指向newHead
            cur.next = newHead;          
            // 修改 next 引用指向
            //newHead指针指向cur,即newHead和cur都向后移动一位
            newHead = cur;  
            // cur 访问下一节点
            cur = next;               
        }
        return newHead;
    }
}

解法二:移步到这里