题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
思路:
题意是链表中 1,2交换,3,4交换…
为了头两个节点的交换步骤与后续节点的交换步骤一致
在头部增加一个root节点。
步骤可以如下表示:
1.next = 2.next;
2.next = 1;
root.next = 2;
然后更新root,1,2 这三个节点。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null)
return null;
if (head.next ==null)
return head;
// 保存新的头部节点,拥抱作为返回值
ListNode newHead = head.next;
// 初始化用来交换的3个节点
ListNode root = new ListNode(100);
root.next = head;
ListNode pre = head;
ListNode next = head.next;
while (next!=null && pre!=null){
// 交换
pre.next = next.next;
next.next = pre;
root.next = next;
// 更新上面3个节点
System.out.println(pre.val);
root = pre;
pre = pre.next;
if (pre!=null)
next = pre.next;
}
return newHead;
}
}