题解 | #反转链表#

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

好像几乎所有人都是递归解法,没有迭代解法,我就来说说迭代解法的思路:
如果一个节点是头结点 head ,后面连着一串节点,如何让该节点的指向反转呢?

head.next.next = head;
head.next = null;

这是针对于每个节点的反转操作,请画图理解一下。
如果对于每个节点都按照这样的解法操作,我们就能对每个节点进行节点的反转,迭代截止条件是 head == null 或者 head.next == null,为什么是这个条件呢?因为我们需要找到这个链表的最后一个节点,最后一个节点的下一个节点若为空,则说明已经找到了最后一个节点,直接返回作为头结点即可。当头结点都为空的时候,我们直接返回头结点即可,链表无需反转。

public class Solution {
    public ListNode ReverseList(ListNode head) {
        //递归版本
        if(head==null || head.next==null)
            return head;
        ListNode res = ReverseList(head.next);
        head.next.next = head;
        head.next = null;
        return res;
    }
}

再来一个递归版本的解法,比较容易理解

public class Solution {
    public ListNode ReverseList(ListNode head) {

        //迭代版本
        ListNode pre=null;
        ListNode cur=head;
        while(cur!=null){
            ListNode tmp=cur.next;
            cur.next = pre;
            pre = cur ;
            cur = tmp;
        }
        return pre;

    }
}
全部评论

相关推荐

06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务