LeetCode笔记汇总
题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
思路
先生成一个哨兵节点dummy,让他的next指向head,同时定义一个temp指向dummy。通过temp来交换之后的两个节点。在交换完成之后,让temp后移两位(也就是让temp指向交换后的第二个节点),再继续交换,直到temp后面的两个元素存在未null的时候停止,并返回dummy.next
可以理解为滑动窗口,每次在链表中取三个元素,交换后两个元素,之后窗口后移两位。
代码
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode temp = dummy;
while(temp.next != null && temp.next.next != null) {
ListNode n1 = temp.next;
ListNode n2 = n1.next;
temp.next = n2;
n1.next = n2.next;
n2.next = n1;
temp = n1;
}
return dummy.next;
}
}