一 題目:
二 思路:
- 空鏈表或者只有一個節(jié)點無需交換
- 因為需要兩兩交換隙笆,涉及每個節(jié)點的前一個節(jié)點宏悦,第一個節(jié)點肯定沒前一個節(jié)點這里造一個
- 我們要返回交換之后的頭節(jié)點真朗,但是我們臨時變量都在往后推望蜡,因此這里記錄第二個節(jié)點(肯定是頭)
- 這里模擬一下操作
- temp 1 2 3 4
- pre curr next 設置虛擬節(jié)點
- pre next curr 指向轉(zhuǎn)換之后
pre curr 引用轉(zhuǎn)變
三 代碼:
/**
* 24. 兩兩交換鏈表中的節(jié)點
* 中等
* 給你一個鏈表灌砖,兩兩交換其中相鄰的節(jié)點,并返回交換后鏈表的頭節(jié)點印蔬。你必須在不修改節(jié)點內(nèi)部的值的情況下完成本題(即勋桶,只能進行節(jié)點交換)。
* temp 1 2 3 4
* pre curr next
* pre next curr
* pre curr
*/
public ListNode swapPairs(ListNode head) {
if (head==null||head.next==null){
return head;
}
ListNode root=null;
if (head.next!=null){
root =head.next;
}
//因為需要兩兩交換侥猬,涉及每個節(jié)點的前一個節(jié)點例驹,第一個節(jié)點肯定沒前一個節(jié)點這里造一個
ListNode pre =new ListNode();
pre.next=head;
//當前節(jié)點
ListNode curr=head;
while (curr!=null&&curr.next!=null){
//下一個節(jié)點
ListNode next = curr.next;
//指向轉(zhuǎn)換
curr.next=next.next;
next.next=curr;
pre.next=next;
//引用轉(zhuǎn)變
pre=curr;
curr=curr.next;
}
return root;
}