Java連結串列指標確實好煩 - 交換連結串列中連續的兩個節點的位置

殷老實發表於2016-09-12

Java的指標鞏固練習2.

背景: 交換一個連結串列中,連續的兩個節點的位置。比如:1->2->3->4 返回2->1->4->3


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */

public static ListNode swapPairs(ListNode head){
		if(head == null || head.next == null)return head; 
		ListNode dummy = new ListNode(0);
		ListNode l = head.next;
		dummy.next = head;
		while(dummy.next != null && dummy.next.next != null){
			ListNode first = dummy.next;
			ListNode second = dummy.next.next;
			
			first.next = second.next;
			second.next = first;
			dummy.next = second;
			
			dummy = dummy.next.next;
		}
		
		return l;
	}



首先我們需要一個多餘的節點來儲存要交換的兩個節點的第一個節點上一級, 然後對著兩個節點進行交換, 再完成兩個節點的交換之後, 我們需要將之前儲存的第一個節點的上一級進行賦值,使其指向交換後的第一個節點,(這個過程很重要,如果缺失了這一過程,那麼我們將丟失連結)。 然後就這個多餘節點賦值為交換之後的第二個節點,也就是為下一次的交換做準備!


相關文章