题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]
示例 2:
输入:head = [] 输出:[]
示例 3:
输入:head = [1] 输出:[1]
实现思路
1.使用虚拟头节点dummy作为头结点head的前一个节点;
2.设置pre节点,pre指向dummy;
3.设置curr节点,curr指向head;
4.使用for循环,循环次数为链表长度值的一半;
实现代码
public ListNode swapPairs(ListNode head) {
ListNode p = head;
int size = 0;
while(p != null){
p = p.next;
size++;
}
if(size == 0 || size == 1){
return head;
}
ListNode dummy = new ListNode();
dummy.next = head;
ListNode pre = dummy;
ListNode curr = head;
p = head;
int count = size / 2;
for(int i = 0; i < count; i++){
pre.next = curr.next;
curr.next = pre.next.next;
pre.next.next = curr;
pre = curr;
curr = curr.next;
}
return dummy.next;
}