首页 > 其他 > 详细

【剑指Offer】反转链表

时间:2020-04-26 21:03:34      阅读:75      评论:0      收藏:0      [点我收藏+]

题目描述

输入一个链表,反转链表后,输出新链表的表头。

解法1

可以使用三个辅助指针pHead, last,next
pHead记录当前节点,last记录上一个节点,next记录下一个节点
首先使用next保存当前节点的下一个节点,然后将当前节点的下一个节点指向last,实现反转
如下图所示
技术分享图片

实现代码

public ListNode ReverseList(ListNode pHead)
{
    ListNode last = null, next = null;
    while(pHead != null){
        next = pHead.next;
        pHead.next = last;
        last = pHead;
        pHead = next;
    }
    return last;
}

解法2

解法1是将链表按照从头到尾的顺序反转的
可以使用递归,通过不断递归深入,实现先从链表的尾节点开始反转
然后通过递归的回溯实现按照从尾到头的顺序反转每个节点
如下图所示
技术分享图片

实现代码

public ListNode ReverseList2(ListNode pHead)
{
    if(pHead == null || pHead.next == null) return pHead;
    ListNode node = ReverseList2(pHead.next);
    pHead.next.next = pHead;
    pHead.next = null;
    return node;
}

更多算法题目的完整描述,AC代码,以及解题思路可以查看GitHub仓库Algorithm

【剑指Offer】反转链表

原文:https://www.cnblogs.com/iwiniwin/p/12781912.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!