首页 > 其他分享 >两两交换链表中的结点

两两交换链表中的结点

时间:2023-04-26 10:55:05浏览次数:39  
标签:结点 ListNode cur nullptr 交换 next 链表

题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。

你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)

 

 步骤:

 

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点
        dummyHead->next = head; // 将虚拟头结点指向head,这样方面后面做删除操作
        ListNode* cur = dummyHead;
        while(cur->next != nullptr && cur->next->next != nullptr)
    { ListNode* tmp = cur->next; // 记录临时节点,保存结点1 ListNode* tmp1 = cur->next->next->next; // 记录临时节,保存结点3 cur->next = cur->next->next; // 步骤一,注意位置会相对的改变 cur->next->next = tmp; // 步骤二 cur->next->next->next = tmp1; // 步骤三 cur = cur->next->next; // cur移动两位,准备下一轮交换 } return dummyHead->next; } };
需要注意的点:
其中判断条件:while(cur->next != nullptr && cur->next->next !=
nullptr)
要考虑奇偶的情况,为奇数时,cur->next为空指针,如果就是空链表,也适用
为偶数时,cur->next->next为空指针
并且
cur->next != nullptr 与 cur->next->next != nullptr不能交换位置,因为如果cur->next为空的话,cur->next->next会出现空指针异常的情况





 

标签:结点,ListNode,cur,nullptr,交换,next,链表
From: https://www.cnblogs.com/gaishuobulao/p/17354996.html

相关文章

  • 23-4-25--链表--一元多项式求导
    设计函数求一元多项式的导数。输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。输入样例:34-5261-20 ......
  • C语言函数(交换数值问题)
    实现交换a,b的数值:直接法:#include<stdio.h>intmain(){inta=10,b=20,temp=0;printf("a=%db=%d\n",a,b);temp=a;a=b;b=temp;printf("a=%db=%d\n",a,b);}输出为:2010函数法:#include<stdio.h>intmain(){inta=10;intb=20;//交换函数s......
  • 楼宇专用POE交换机如何选择
    数字楼宇对讲系统是小区智能化系统的主力军,占据了yue来yue多的市场份额,楼宇专用POE交换机在楼宇对讲行业的应用,给楼宇对进系统带来了质的改变,也给数字楼宇对进系统升级换代带来了JU大的变化。楼宇专用POE交换机可通过网线为数字楼宇对讲室内分机终端设备供电,传送距离可达100m(天柏楼......
  • 汉源高科1路百兆FX光口+4路百兆电口工业级以太网交换机工业导轨式四口工业级光纤收发
    汉源高科HY5700-4514F-SC20系列工业级光纤收发器支持1个百兆光纤接口,4个百兆以太网电接口。用户可根据工业应用现场的实际需要,选择合适的光纤的接口类型以及光接口的传输距离。汉源高科HY5700-4514F-SC20工业级光纤收发器支持超宽电压输入范围,可提供双电源冗余接入。该系列专门针对......
  • 分治算法:剑指 Offer 25. 合并两个排序的链表
    题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 限制:0<=链表长度<=1000 解题思路:    classSolution{publicListNodemergeTwoLists(ListNodel1,ListNodel2){ListNodedum=newListNode......
  • #yyds干货盘点# LeetCode面试题:分隔链表
    1.简述:给你一个链表的头节点head和一个特定值x,请你对链表进行分隔,使得所有小于x的节点都出现在大于或等于x的节点之前。你应当保留两个分区中每个节点的初始相对位置。 示例1:输入:head=[1,4,3,2,5,2],x=3输出:[1,2,2,4,3,5]示例2:输入:head=[2,1],x=2输出:[1,2......
  • [Leetcode]返回链表开始入环的第一个节点
    力扣链接思路一:快慢指针法一个指针从相遇点走,一个指针从起始点走,会在入口点相遇.最终代码:/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*detectCycle(structListNode*head){......
  • 华为云企业交换机ESW,助力企业成功上云
    传统的企业数据上云端,云上云下通过专线三层互通,迁移过程中云上云下不在同一子网,应用就必须更换IP和子网了。但在企业中存在很多老的应用,部分IP写死在配置文件中,难以修改。而通过华为企业交换机的大二层技术,云上云下同子网,老应用可以直接带着原有IP上云。 华为云企业交换机(Enterpri......
  • 快慢指针判断链表中是否存在循环
    给链表设置快慢两个指针,每次移动时,快指针的速度是慢指针的一倍。即每次快指针移动两次,慢指针移动一次。如果存在循环,快指针跑两圈就可以追上慢指针。 为什么不让慢指针停在原地等呢?因为循环有可能出现在中间位置。如此一来,循环过的位置就不必从头再循环。 整个过程的所有......
  • [Leetcode]找出链表公共结点
    力扣链接思路:先求出两个链表的长度差长链表先走差距步同时走,第一个地址相同的是交点代码:/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*getIntersectionNode(structListNode*he......