剑指Offer:反转链表【24】

剑指Offer:反转链表【24】

题目描述

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

解题分析

这道题我才发现我是属于那种真的笨,图都画出来了流程写不出来。看了别人的代码,总觉得自己差一步。

这也是链表题的一个特点,指针的复杂变化。首先毋庸置疑肯定要有三个指针,他们的排列位置如下图第一行所示。

然后第二个指针,即cur的next一转,指向第一个,即pre,这是就会出现二指向三的指针断裂,所以tmp指针需要时刻指向cur指针的下一个。

Java题解

 public ListNode ReverseList(ListNode head) {
        if(head==null)
            return null;
        ListNode reversedHead=null;
        ListNode current=head;
        ListNode tmp=null;
        ListNode pre=null;
        while(current!=null){
            tmp=current.next;  //tmp指针时刻指向cur的下一个节点位置
            current.next=pre;  //cur下一个位置指向前一个节点
            if(tmp==null)  //如果结果为空,返回当前节点,即为倒置后的头结点
                reversedHead=current;
            pre=current;  //pre指向当前节点
            current=tmp;    //cur指向下一个节点,然后重复开始此过程
        }
    return reversedHead;
    }

  

猜你喜欢

转载自www.cnblogs.com/MrSaver/p/9219422.html