1. 程式人生 > >24.成對的交換節點(24.Swap Nodes in Pairs)

24.成對的交換節點(24.Swap Nodes in Pairs)

solution == cnblogs || des nbsp 位置 class 空間

題目:

給定一個鏈表,交換每兩個相鄰的節點並返回其頭。

例如,
給定1->2->3->4,您應該返回列表2->1->4->3

您的算法應該僅使用恒定空間。不能修改列表中的值,只能改變節點本身。

思路:從鏈表的頭節點開始將相鄰的兩個節點進行交換位置,然後剩下未交換的節點作為一個新的鏈表進行遞歸的交換,直到所要進行交換的鏈表節點個數小於2,則返回此鏈表。

代碼:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode swapPairs(ListNode head) { 11 12 //思路:從鏈表的頭節點開始將相鄰的兩個節點進行交換位置,然後剩下未交換的節點作為一個新的鏈表進行遞歸的交換,直到所要進行交換的鏈表節點個數小於2,則返回此鏈表。 13 14 if(head==null||head.next==null
){ 15 16 return head; 17 18 } 19 20 ListNode l=head.next.next;//剩下未進行交換節點組成的新鏈表的表頭; 21 22 //將原鏈表的頭節點和第二個節點進行交換位置 23 ListNode temp=head; 24 head=temp.next;//將原鏈表的第二個節點變為頭節點 25 head.next=temp;//將原鏈表的頭節點變為第二個節點
26 temp.next=swapPairs(l);//新鏈表進行遞歸交換相鄰節點作為已經交換相鄰節點的第二個節點的後繼節點; 27 28 return head; 29 } 30 }

24.成對的交換節點(24.Swap Nodes in Pairs)