0
点赞
收藏
分享

微信扫一扫

算法:反转链表(双指针迭代法)

爱读书的歌者 2022-02-15 阅读 67

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

示例 1:

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

示例 2:

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

题解:我们可以申请两个指针,第一个指针叫 pre,最初是指向 null 的。
第二个指针 cur 指向 head,然后不断遍历 cur。
每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
都迭代完了(cur 变成 null 了),pre 就是最后一个节点了。
动画演示如下:

动画演示中其实省略了一个tmp变量,这个tmp变量会将cur的下一个节点保存起来,考虑到一张动画放太多变量会很混乱,所以我就没加了,具体详细执行过程,请点击下面的图片查看。

 

 将tmp里面存上cur.next,这样cur就可以找到它的下一个位置,不然经过cur.next=prev,cur就会丢失原来要指向的下一个位置。

最终代码实现:(java)

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null){
            return null;
        }//申请节点,prev和 cur,prev指向null
    ListNode cur = head;
    ListNode prev = null;
    while(cur != null){
        ListNode curNext = cur.next;//记录当前节点的下一个节点
        cur.next = prev;//然后将当前节点指向pre
        prev = cur;
        cur = curNext;//pre和cur节点都前进一位
    }
    return prev;
    }
}
举报

相关推荐

0 条评论