反转链表
链表反转:
(图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