Back
Featured image of post LeetCode 反转链表

LeetCode 反转链表

LeetCode-反转链表

题目信息

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

image-20220425213950936

示例1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例2:

输入:head = [1,2]
输出:[2,1]
class Solution {
    public ListNode reverseList(ListNode head){
        ListNode prev = null;
        ListNode curr = head;
        ListNode next = null;

        while(curr != null) {
            next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }
        return prev;
    }
}       

算法思路:

需要定义三个指针:prev , curr , next

curr :表示当前节点,相当于for循环中的 i,用来遍历链表,使循环往前走

prev :用来返回最终反转后的链表,遍历完链表,prev 指向新链表的头部

next :占住curr 的下一个节点

==为什么需要 next 指针?==

==循环迭代的每一步,都是把 curr.next 设置成 prev(prev往前挪),然后curr 再往前挪,但由于curr.next此时指向了prev,找不到curr 之前的下一个节点,此时就需要先定义一个next指针,提前把curr的下一位给占住==

  • curr 和 next 永远指向同一个节点,prev 指向它们的前一个节点
  • 每一次反转都是把 curr.next 设置成 prev,然后把 curr 往前挪

承认自己的无知 , 乃是开启智慧的大门
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy