兩兩交換連結串列中的節點-LeetCode24模擬節點
阿新 • • 發佈:2022-12-04
力扣連結:https://leetcode.cn/problems/swap-nodes-in-pairs/
題目
給你一個連結串列,兩兩交換其中相鄰的節點,並返回交換後連結串列的頭節點。你必須在不修改節點內部的值的情況下完成本題(即,只能進行節點交換)。
示例1:
輸入:head = [1,2,3,4] 輸出:[2,1,4,3]
示例2:
輸入:head = [] 輸出:[]
示例3:
輸入:head = [1] 輸出:[1]
當拿到這個題目,我相信很多人跟我一樣,比較矇蔽了,這怎麼交換啊?這個題目需要去模擬,待我一一來分析。
思路
建議使用虛擬頭結點,這樣會方便很多,要不然每次針對頭結點(沒有前一個指標指向頭結點),還要單獨處理。接下來就是交換相鄰兩個元素了,此時一定要畫圖,不畫圖
操作之後,連結串列如下:
看這個可能就更直觀一些了:
看完這個過程是不是理解很多了,本人也是。
由此我們可以寫出我們的程式碼:
class Solution { public ListNode swapPairs(ListNode head) { ListNode dm=new ListNode(0); dm.next=head; ListNode curr=dm; while(curr.next!=null && curr.next.next!=null){ ListNode temp1=curr.next; ListNode temp2=curr.next.next.next; curr.next=curr.next.next; curr.next.next=temp1; curr.next.next.next=temp2; curr=curr.next.next; } return dm.next; } }首先我們先建立一個虛擬頭結點
其實還有遞迴方法可以解決,程式碼如下:
class Solution { public ListNode swapPairs(ListNode head) { if(head == null || head.next == null){ return head; } ListNode next= head.next; head.next = swapPairs(next.next); next.next = head; return next; } }
怎麼樣,模擬以後是不是感覺簡單很多了,很多題目需要自己動手去嘗試!!!