题目描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
思路:简单的思想
主要就是对循环条件 设定好!
注意 虚拟头节点的使用;一般还要和 临时节点一样,设置一个临时虚拟头节点
代码:
class Solution {
public ListNode swapPairs(ListNode head) {
//一次进行两个的交换;最后再进行 个数的判断
//单数最后一个不用换,偶数全部都换
ListNode res = new ListNode();
ListNode pre = res;
pre.next = head;
ListNode cur = head;
//这里的循环条件需要注意,要同时满足两个条件,才能继续
while(cur!= null && cur.next != null){
//直接指向下一个
pre.next = cur.next;
//记录下一个原来指向的节点,可能是空
ListNode temp = cur.next.next;//记录下下一个节点
//下一个节点指向当前节点
cur.next.next = cur;
cur.next = temp;//可能为空
pre = cur;
cur = temp;
}
return res.next;
}
}