坚持第44天,加油!!!
题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
代码
/**
* 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 pre=new ListNode(-1);
pre.next=head;
ListNode node=pre;
while(node.next!=null&&node.next.next!=null)
{
ListNode l1 = node.next, l2 = node.next.next;
ListNode next = l2.next;
node.next=l2;
l2.next=l1;
l1.next=next;
node=l1;
}
return pre.next;
}
}
反思
若并没有保存需要交换的节点即(l1,l2),则需要注意交换的顺序,但是如果已经保存了节点,则可以随便修改改变方向的语句顺序。特记,保存断点