【刷题记录】24. 两两交换链表中的节点

简介: 【刷题记录】24. 两两交换链表中的节点

一、题目描述


来源:力扣(LeetCode)


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


示例 1:


网络异常,图片无法展示
|


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

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


示例 2:


输入:head = []

输出:[]


示例 3:


输入:head = [1]

输出:[1]


提示:


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


二丶思路分析


通过迭代的方式实现两两交换链表中的节点


  • 创建一个哑哨节点dummyHead 指向 head
  • 初始化一个当前节点 curTempNode 等于 dummyHead
  • 每次交换 curTempNode  后面的两个节点 l1l2
  • curTempNode  后面存在少于两个节点时候,停止。
  • 更新当前节点  curTempNode


三、代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
       ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode curTempNode = dummyHead;
while (curTempNode.next != null && curTempNode.next.next != null){
             ListNode l1 = curTempNode.next;
             ListNode l2 = curTempNode.next.next;
             //交换 l1 l2节点
             curTempNode.next = l2;
             l1.next = l2.next;
             l2.next = l1;
             curTempNode = l1;
        }
        return dummyHead.next;
    }
}

复杂度分析


  • 时间复杂度:
    网络异常,图片无法展示
    |
    ,其中 n 是链表的节点数量
  • 空间复杂度:
    网络异常,图片无法展示
    |


运行结果


网络异常,图片无法展示
|


总结


这个题目就是通过迭代或者一个递归,来完成两两节点的交换。


主要还是在对于链表的使用的联系。思路还是很容易理解的。


再接再厉,继续加油~~

目录
相关文章
|
2月前
LeetCode第二十四题(两两交换链表中的节点)
这篇文章介绍了LeetCode第24题的解法,即如何通过使用三个指针(preNode, curNode, curNextNode)来两两交换链表中的节点,并提供了详细的代码实现。
22 0
LeetCode第二十四题(两两交换链表中的节点)
|
2月前
Leetcode第十九题(删除链表的倒数第N个节点)
LeetCode第19题要求删除链表的倒数第N个节点,可以通过快慢指针法在一次遍历中实现。
44 0
Leetcode第十九题(删除链表的倒数第N个节点)
05_删除链表的倒数第N个节点
05_删除链表的倒数第N个节点
|
2月前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
56 0
|
7月前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
6月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
6月前
|
存储 SQL 算法
LeetCode 题目 86:分隔链表
LeetCode 题目 86:分隔链表
|
6月前
|
存储 算法 Java
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
【经典算法】Leetcode 141. 环形链表(Java/C/Python3实现含注释说明,Easy)
65 2
|
7月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
61 1
|
6月前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表