• 反转链表


    链表反转:

     

    (图1)

    把问题规模减小,并且减小的量为1

     

    (图2)

    假设我们的程序能够正常的反转:则反转后为

     

    (图3)

    反转后,1元素并没有任何操作,所以反转1的next仍然指向2,

     

    (图4)

    假设2开头的链表已经反转成功,接下来只要将2的next指向1,

     

    (图5)

    而1的next指向null即可。

     

    (图6)

    看似复杂的问题,把如此多的指针反过来指,其实只要将两个节点反过来即可。

    public static ListNode ReverseListDigui(ListNode head) {
        
            //链表为空或者只有一个节点的时候
            
            if(head==null || head.next==null){
                return head;
            }
            
            ListNode newhead=ReverseListDigui(head.next);
            head.next.next=head;
            head.next=null;
            
            bianLi(newhead);
            
            return newhead;
            
            
        }

     非递归实现

    public static ListNode ReverseList(ListNode head) {
            
            ListNode pre=null,cur=head,next=null;
            
            while(cur!=null) {
                
                next=cur.next;
                cur.next=pre;
                pre=cur;
                cur=next;
                
            }
            
            return pre;
        }


    ————————————————
    版权声明:本文为CSDN博主「华天下之大软」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_37117521/article/details/80808631

  • 相关阅读:
    Python易忽略要点记录二
    Python使用的几个小技巧
    MySQL内容整理二
    C++面向对象知识总结
    AssemblyInfo 的作用
    中国新年第一篇
    function函数的运用
    C语言1博客作业03
    C语言1博客作业02
    .C# 拷贝一个图片到指定文件夹下(IO文件操作实例)
  • 原文地址:https://www.cnblogs.com/ldcs/p/11758441.html
Copyright © 2020-2023  润新知