【刷题记录】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天前
|
算法
【优选算法专栏】专题九:链表--------两两交换链表中的节点
【优选算法专栏】专题九:链表--------两两交换链表中的节点
18 0
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
链表遍历,链表查找和统计节点,链表插入新节点,链表删除节点,链表修改指定节点,链表头插法,尾插法总结
|
2天前
|
存储 Java
高效删除链表倒数节点最优实现
要删除链表的倒数第 n 个节点,并返回链表的头节点,我们可以使用一趟扫描的方法来实现。这个方法涉及使用两个指针:快指针和慢指针。
|
2天前
|
算法
算法系列--链表刷题(二)(下)
算法系列--链表刷题(二)(下)
18 0
|
2天前
数据结构--链表刷题(一)快慢指针(上)
数据结构--链表刷题(一)快慢指针
16 0
|
2天前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
2天前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
|
2天前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
2天前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
|
2天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
10 0