1. 程式人生 > >單鏈表相關算法2_23

單鏈表相關算法2_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