題目
???????將鏈表中相鄰的兩個(gè)節(jié)點(diǎn)交換位置侯勉,注意第一個(gè)節(jié)點(diǎn)與第二個(gè)節(jié)點(diǎn)要交換位置朗儒,第三個(gè)節(jié)點(diǎn)與第四個(gè)節(jié)點(diǎn)要交換位置, 而第二個(gè)節(jié)點(diǎn)不用與第三個(gè)節(jié)點(diǎn)交換位置。
Note:
???????1.不允許修改節(jié)點(diǎn)的值;
???????2.只能用常量的額外空間.
思路分析:
代碼實(shí)現(xiàn)如下:
public ListNode swapPairs(ListNode head) {
//如果鏈表為空或者只有一個(gè)節(jié)點(diǎn),那么就直接返回head節(jié)點(diǎn)即可
if(head == null ||head.next == null)
return head;
ListNode preNode, currentNode, afterNode;
currentNode = head;
//添加輔助頭節(jié)點(diǎn)最欠,這是鏈表中比較常用的小技巧呕乎,因?yàn)檫@樣可以避免處理head的邊界情況
head = new ListNode(0);
head.next = currentNode;
preNode = head;
while (currentNode!=null && currentNode.next!=null){
afterNode = currentNode.next;
currentNode.next = afterNode.next;
afterNode.next = currentNode;
preNode.next = afterNode;
preNode = currentNode;
currentNode = currentNode.next;
}
return head.next;
}