首页 > 其他分享 >2-链表-41-两两交换链表中的节点-LeetCode24

2-链表-41-两两交换链表中的节点-LeetCode24

时间:2024-05-29 09:00:08浏览次数:24  
标签:head ListNode next 链表 LeetCode24 41 currentListNode 节点

2-链表-41-两两交换链表中的节点-LeetCode24

参考:代码随想录

LeetCode: 题目序号24

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

技术公众号:CodeZeng1998(纯纯技术文)

生活公众号:好锅(Life is more than code)

CSDN: CodeZeng1998

其他平台:CodeZeng1998好锅

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

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

示例 1:

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

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

提示:

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

链表结构如下:

    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;
        }
    }
    /**
     * 两两交换链表中的节点
     *
     * @param head 待两两交换链表中的头节点
     * @return 两两交换链表后的头节点
     * @author CodeZeng1998
     */
    public ListNode swapPairs(ListNode head) {
        ListNode dumyhead = new ListNode(-1);
        dumyhead.next = head;
        ListNode tempListNode;
        ListNode firstListNode;
        ListNode secondListNode;
        ListNode currentListNode = dumyhead;

        while (currentListNode.next != null && currentListNode.next.next != null) {
            tempListNode = currentListNode.next.next.next;
            firstListNode = currentListNode.next;
            secondListNode = currentListNode.next.next;

            currentListNode.next = secondListNode;
            secondListNode.next = firstListNode;
            firstListNode.next = tempListNode;
            currentListNode = firstListNode;
        }

        return dumyhead.next;
    }

ChatGPT:

这段代码定义了一个名为 swapPairs 的方法,它接受一个 ListNode 类型的 head 作为输入,并返回一个 ListNode。

方法内部:

  1. 创建了一个值为 -1 的新 ListNode,称为 dumyhead,并将其下一个节点设置为输入的 head。这个节点用作虚拟节点,以简化边界情况的处理。
  2. 初始化了四个 ListNode 变量:tempListNodefirstListNodesecondListNodecurrentListNodecurrentListNode 最初设置为 dumyhead
  3. 进入一个 while 循环,只要在当前节点(currentListNode)之后的链表中还有至少两个节点,就会继续执行。
  4. 在循环内部,它交换了成对的节点:
    • 将当前对之后的第三个节点(tempListNode)存储起来。
    • 确定了对中的第一个和第二个节点(firstListNodesecondListNode)。
    • 重新排列指针,使当前节点指向第二个节点,第二个节点指向第一个节点,第一个节点指向第三个节点。
    • currentListNode 指针移动到下一对的第一个节点上。
  5. 最后,返回虚拟头节点之后的下一个节点,这实际上是修改后链表的新头节点。

24. Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head. You must solve the problem without modifying the values in the list’s nodes (i.e., only nodes themselves may be changed.)

Example 1:

Input: head = [1,2,3,4]
Output: [2,1,4,3]

Example 2:

Input: head = []
Output: []

Example 3:

Input: head = [1]
Output: [1]

Constraints:

  • The number of nodes in the list is in the range [0, 100].
  • 0 <= Node.val <= 100

更多内容欢迎关注我(持续更新中,欢迎Star✨)

Github:CodeZeng1998/Java-Developer-Work-Note

技术公众号:CodeZeng1998(纯纯技术文)

生活公众号:好锅(Life is more than code)

CSDN: CodeZeng1998

其他平台:CodeZeng1998好锅

标签:head,ListNode,next,链表,LeetCode24,41,currentListNode,节点
From: https://blog.csdn.net/weixin_43873121/article/details/139283179

相关文章

  • 《python编程从入门到实践》day41
    #昨日知识点回顾    用户注销、注册,限制访问,新主题关联到当前用户#今日知识点学习第20章设置应用程序的样式并部署20.1设置项目“学习笔记”的样式    20.1.1应用程序django-bootstrap4#settings.py---snip---INSTALLED_APPS=[#我的应......
  • 数据结构-单向链表的实现(c语言)
    链表的定义:链表是由一系列的结点组成的,每个结点包含两个域,分别是指针域(*next)与数据域(data)。单向链表的实现//.h文件#ifndeDXLB_H#defineDXLB_H//定义结点结构体typedefstructLINKNODE{structLINKNODE*next;//指向下一个结点的指针intdata;......
  • 反转链表
    leetcode:206.需求:反转链表原链表:graphLRA-->B-->C-->D-->null反转后:graphRLD-->C-->B-->A-->null graphLR D-->C-->B-->A-->null双指针法:/***Definitionforsingly-linkedlist.*publicclassListNode{*......
  • 【LeetCode算法】第83题:删除排序链表中的重复元素
    目录一、题目描述二、初次解答三、官方解法四、总结一、题目描述二、初次解答1.思路:双指针法,只需遍历一遍。使用low指向前面的元素,high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面,实现重复元素的删除。2.代码:/***Definitionfor......
  • 实现双链表各种基本运算的算法
    实验三:实现双链表各种基本运算的算法一、实验目的与要求目的:领会双链表存储结构和掌握双链表中各种基本运算算法设计。内容:编写一个程序dlinklist.cpp,实现双链表的各种基本运算和整体建表算法(假设链表的元素类型ElemType为char),并在此基础上设计一个程序exp2-3.cPp,......
  • 设计链表
    leetcode:707题这题基本涵盖链表的的常用操作,获取第n个节点的值(从零开始)头部插入节点尾部插入节点第n个节点前插入节点删除第n个节点C#:publicclassMyLinkedList{publicintcount{get;set;}privateNodedummyHead;publicMyLinkedList(){......
  • [博客迁移20190713]题解 P4169 【[Violet]天使玩偶/SJY摆棋子】
    《算法竞赛》书上例题(可惜原书没代码)天使玩偶,一道好题。(书p243)我就来谈谈自己的想法吧!而总有人在这种明明可以离线处理的三维偏序问题上投机取巧。如:KDtree。蒟蒻想说,KDtree在这题复杂度是不对的。虽有剪枝,可是还是有可能遍历整棵树的(期望复杂度不靠谱)对上述看法有争议的,请跳......
  • 7-41 计算阶乘和
    对于给定的正整数N,需要你计算S=1!+2!+3!+...+N!。输入格式:输入在一行中给出一个不超过10的正整数N。输出格式:在一行中输出S的值。输入样例:3输出样例:9#include<stdio.h>intmain(){intn;scanf("%d",&n);inty=1;//y是单个数的阶乘"!"int......
  • 快充催NB群 974764414
    现在手机电池容量是按多少v计算啊,3.8v还是5v。比如说充入10wh,对应多少ah 3.85,满电4.35@天梦 “满电4.35”是什么意思@ 字面意思,充满4.35 @天梦 那官方宣传的5000mAh是按3.85v还是4.35v啊,比如说“小米13Ultra手机搭载5000mAh容量电池”  @天梦 那官方宣传的5000......
  • 【算法】合并k个已排序的链表
    ✨题目链接:NC51合并k个已排序的链表✨题目描述 合并k 个升序的链表并将结果作为一个升序的链表返回其头节点。数据范围:节点总数 0≤......