Java链表指针确实好烦 – 交换链表中连续的两个节点的位置

  • Post author:
  • Post category:java



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;
	}



首先我们需要一个多余的节点来存储要交换的

两个节点的第一个节点上一级

, 然后对着两个节点进行交换, 再完成两个节点的交换

之后

, 我们需要将之前存储的第一个节点的上一级进行赋值,使其指向交换后的第一个节点,(这个过程很重要,如果缺失了这一过程,那么我们将丢失链接)。 然后就这个多余节点赋值为交换之后的第二个节点,也就是为下一次的交换做准备!



版权声明:本文为YtdxYHZ原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。