两两交换链表中的节点

两两交换链表中的节点

题解(java)

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(0);//定义哑结点
        dummy.next = head;//连接哑结点与头结点
        ListNode current = dummy;//current负责具体操作
        while(current.next != null && current.next.next != null){
            ListNode node1 = current.next;
            ListNode node2 = current.next.next;
            current.next = node2;
            node1.next = node2.next;
            node2.next = node1;
            current = node1;
        }
        return dummy.next;
    }
}

图示

  • 交换中
    两两交换链表中的节点_第1张图片

  • 交换后
    两两交换链表中的节点_第2张图片

详解

  • 如图一,将题目简化即为转换 node1 和 node2.
    【先将 current 与 node2 相连,再将 node1 与 node2 之后的节点相连,最后再将 node2 与 node1相连,并使 current 移到 node1 的位置】
  • 因为此题要求转化的为节点,而不只是节点的值,所以不涉及值的操作。

Tips

  • 1>.注意定义完哑结点后要与头结点相连,否则:
    两两交换链表中的节点_第3张图片
    将输出空值
  • 2>.注意迭代终止条件用 current 判断
    【如果用 dummy 判断,会陷入死循环】

声明

  • 原作者:E.L.E
  • <未经允许不得转载使用,欢迎大家评论>

你可能感兴趣的:(算法,链表,单链表)