單鏈表相關算法2_23
阿新 • • 發佈:2019-02-23
技術 pan mage div clas 下一個 需要 保存 解決
1. 鏈表反轉:
給出兩種解決方案:叠代式和遞歸式:
a:叠代式
理解的時候不要想著前後插,直接按照改變順序也就是其指針指向即可。關於鏈表這一部分經常用到一個點就是當前節點(now),之前節點(prev),之後節點(next)。
插入的時候需要記錄當前節點,下一個節點和之前最近的一個節點,在執行的時候,先保存下一個節點,之後將當前節點指向前一個節點,之後將下一個節點作為當前節點,之前操作的節點作為前一節點。
public ListNode reverseList(ListNode head) { if(head==null || head.next==null){return head } ListNode pre=null; ListNode now=head; while(now!=null){ ListNode next=now.next; now.next=prev; prev=now; now=next; } return prev; }
遞歸形式求解:
同樣是找到最後一個節點,將最後一個節點指向前一個節點,在執行的過程中,所有其後面的節點都已經執行完畢。
註意中間的操作head.next=null,是為了防止後續指向時形成環操作。
public ListNode reverseList(ListNode head) { if(head.next==null){ return head; } ListNode next=head.next; head.next=null; ListNode re=reverseList(next); next.next=head; return re; }
單鏈表相關算法2_23