24. 两两交换链表中的节点

题目: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进行交换,具体实现参考代码。


觉得内容还不错?打赏个钢镚鼓励鼓励!!👍