题目:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
代码:
class Solution {
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
//少于2个节点直接返回
return head;
}
ListNode cur = head;//当前点
ListNode pre = null;//前一个
ListNode next;//下一个
head = head.next;//头部变成第二个
while (cur != null && cur.next != null) {
next = cur.next;
//交换
cur.next = next.next;
next.next = cur;
if (pre != null) {
pre.next = next;
}
//cur后移
pre = cur;
cur = cur.next;
}
return head;
}
}
不同于直接两个值的交换,链表的交换比较麻烦点,可以关注下备注中交换的代码。
链表,对于每个节点来说,由两部分组成:1、节点及节点的属性值。2、节点的链即下一个节点的地址。所以对于链表中两个节点的交换,我们直接修改链即可,即next属性。同时还需要注意不要让链断掉。最好理解的办法就是定义3个变量,前一个值pre,当前值cur,下一个值next,对cur和next进行交换,具体实现参考代码。