题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
提示:
- 链表中节点的数目在范围内
解释:
- 一、创建一个虚拟头节点
dummy指向head - 二、步骤一对应的就是
dummy.next = b - 三、步骤二对应的就是
a.next = b.next - 四、步骤三对应的就是
b.next = a
注意:步骤二和三顺序不能互换,如果互换b.next指向a,再执行a.next = b.next,a就指向自己了
/**
* 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) {
ListNode dummy = new ListNode(-1);
dummy.next = head;
ListNode p = dummy;
while(p.next != null && p.next.next != null){
ListNode a = p.next;
ListNode b = p.next.next;
p.next = b;
a.next = b.next;
b.next = a;
p = a;
}
return dummy.next;
}
}
此题AC