題目描述
給定一個鏈表,兩兩交換其中相鄰的節點(結點進行交換而不是簡單地進行值交換),并返回交換后的鏈表。
示例:
輸入:1->2->3->4
輸出:2->1->4->3
解析
實現技巧:遞歸實現
實現方法
如果利用調整指針的方式完成鏈表的交換會產生大量的指針交換操作,難度較大。
這里介紹遞歸實現:
- 鏈表每次交換前兩個結點
- 后面n-2個結點作為新的鏈表遞歸實現
- n-2結點的結果放到前兩個結點的鏈表后面
遞歸實現代碼
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){//遞歸判斷條件,如果無結點或者只有一個結點直接返回
return head;
}
/*取出前兩個結點*/
ListNode first = head;
ListNode second = head.next;
/*head指向新的鏈表*/
head = second.next;
/*前兩個結點交換位置*/
second.next = first;
/*head鏈表的結果鏈接到前兩個結點鏈表后面*/
first.next = swapPairs(head);
/*返回結果*/
return second;
}