LeetCode[24]两两交换链表中的节点

难度:中等

题目:

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

示例一: 

LeetCode[24]两两交换链表中的节点_第1张图片

 输入:head = [1,2,3,4] 

 输出:[2,1,4,3]


示例二:

输入:head = [] 

输出:[]


示例三:

输入:head = [1] 

输出:[1]


提示:

  • 链表中节点的数目在范围 [0, 100] 内
  • 0 <= Node.val <= 100

Related Topics

  • 递归
  • 链表

重点!!!解题思路 

第一步:

首先建立前驱节点hair,再创建节点pre在hair位置

(因为我们需要判断前驱节点的下一个节点以及下一个节点的下一个节点有没有值,这样做的话我们就不需要特殊判断head节点是否为null)

第二步: 

设定pre的下一个节点为one,pre下一个节点的下一个节点为two,依次交换两个节点,

然后使pre到one的位置上,一次循环结束,直到pre的下一个节点为空或下一个节点的下一个节点为空。

源码: 

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode hair=new ListNode(-1,head); 
        ListNode pre=hair;
        while (pre.next!=null&&pre.next.next!=null){
            ListNode one=pre.next;
            ListNode two=pre.next.next;
            one.next=two.next;
            two.next=one;
            pre.next=two;
            pre=one;
        }
        return hair.next;
    }
}

运行结果: 

LeetCode[24]两两交换链表中的节点_第2张图片

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。  

你可能感兴趣的:(算法刷题篇,线性表基础(刷题篇),链表(List)及经典问题,(刷题篇),leetcode,算法,职场和发展)