24. 兩兩交換鏈表中的節(jié)點(diǎn)
題目描述
給定一個(gè)鏈表隅茎,兩兩交換其中相鄰的節(jié)點(diǎn)之斯,并返回交換后的鏈表音念。
你不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值,而是需要實(shí)際的進(jìn)行節(jié)點(diǎn)交換稍计。
示例:
給定 1->2->3->4, 你應(yīng)該返回 2->1->4->3.
代碼實(shí)現(xiàn)
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummyHead = new ListNode(0,head);
ListNode preNode = dummyHead;
while(preNode.next != null && preNode.next.next != null){
ListNode fistNode = preNode.next;
ListNode nextNode = fistNode.next;
preNode.next = nextNode;
fistNode.next = nextNode.next;
nextNode.next = fistNode;
preNode = fistNode;
}
return dummyHead.next;
}
}
解題思路
- 創(chuàng)建虛擬頭節(jié)點(diǎn)dummyHead,使得next指針始終指向頭節(jié)點(diǎn)
- 設(shè)置preNode 等于 dummyHead,
- 開啟 while 循環(huán)缨恒,三步完成一對(duì)結(jié)點(diǎn)的交換
- 使得preNode的next指向下一個(gè)需要交換的節(jié)點(diǎn)
- 繼續(xù)交換,直到preNode.next為空轮听,或者 preNode.next.next為空