24.两两交换链表中的节点 思路:首先定义一个虚拟头结点dummyhead,让dummyhead->next=head,然后建立一个新节点指向dummyhead.ListNode*dummyhead=newListNode(0);dummyhead->next=head;ListNode*cur=dummyhead;首先我们保存一下cur->next和cur->next->next->next,因为之后翻转的时候先改变了cur->next的指向,但是cur->next->next要指向最开始的cur->next,如果不保存是很难做到的。最后我们要让原来的cur->next指向cur->next
24.两两交换链表中的节点题目链接:24.两两交换链表中的节点文章讲解:24.两两交换链表中的节点视频讲解:帮你把链表细节学清楚!|LeetCode:24.两两交换链表中的节点_哔哩哔哩_bilibili思路:题意要求两两交换链表中的节点 ,首先可以想到:1.两个节点的交换2.整个链表的遍历对于两个节点的交换可以将操作指针cur放在两个交换节点的前一个节点,然后进行交换,随后将cur指针进行移动,可以实现对整个链表的遍历。如图所示,给了一个链表两个节点交换的范例:依然是运用虚拟头结点dummyhead,操作指针cur需要指向两个反转节点的前一个节点。 循环退出条件:cur->next=NULL
-两两交换链表中的节点 -cur移动的时候,应该后移动俩位,或者说移动到下一操作节点的前一位-删除链表的倒数第N个节点 -因为slow删除元素是要在删除元素的前一位进行删除,所以while(k--)移动的fast还不够,还需要再往后移动一位,这样才能让slow指向正确的位置-链表相交 -如果最后是相交的链表,相交部分是一条链,所以只需要把它们尾部对齐,从短链位置出发,遍历判断有无相等即可-环形链表II -哈希表 -用一个unordered_set记录遍历过的ListNode*即可,如果碰到相同的即可返回,遍历结束那就returnnullptr -双指针
两两交换链表中的节点publicListNodeswapPairs(ListNodehead){ListNodedummyHead=newListNode(0);dummyHead.next=head;ListNodetemp=dummyHead;while(temp.next!=null&&temp.next.next!=null){ListNodenode1=temp.next;ListNodenode2=temp.next.next;temp.next=node2;node1.next=node2.next;node2.next=node1;temp=node1;}returndummy
LeetCode 24.两两交换链表中的节点题目链接:24.两两交换链表中的节点-力扣(LeetCode)视频链接:帮你把链表细节学清楚!|LeetCode:24.两两交换链表中的节点_哔哩哔哩_bilibili思路给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。这种题建议画图,不然的话很多指针容易乱,最好用虚拟头结点的方式,这样就不用再进行单独处理。很多人这种题的过程容易写错,就像这道题,正确的过程如下图所示:先让cur指向虚拟头节点,然后进行以下操作 代码实现:classSolution{public:ListNode
24.两两交换链表中的节点题目要点:该题主要考察对结点指针的把握情况,要能够熟练运用结点的交换,临时结点的创建。做题时把图画出来就一目了然。注意:1.注意遍历的停止条件 cur->next != nullptr && cur->next->next != nullptr,该条件是while里的,注意和if里的区分。2.在结点交换时要明白结点的指向只能有一个,一旦更改,原先指向的结点就找不到了,注意先用临时结点保存再更改。19.删除链表的倒数第N个节点题目要点:利用双指针的思想,左右指针好比是一把尺子,让右指针先走n+1步是为了做出尺子的长度,遍历完后左指针正好在要删除的结点左侧(n+1的功劳)
24.两两交换链表中的节点-力扣(LeetCode)一次AC,重点是要画图梳理清楚交换节点的过程#Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defswapPairs(self,head:Optional[ListNode])->Optional[ListNode]:dummy_node=ListNode(next=head)cur=dummy_nodewhilecur.next!=Nonean
链表进阶系列224两两交换链表中的结点我的代码力扣的示例代码代码随想录的代码19删除链表的倒数第N个结点我的代码力扣的示例代码代码随想录的代码160链表相交我的代码力扣的示例代码代码随想录的代码142环形链表II代码随想录的代码力扣的示例代码24两两交换链表中的结点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]示例2:输入:head=[]输出:[]示例3:输入:head=[1]输出:[1]我的代码没看任何资料,自己整理逻辑写出来的。classL
我经常搞混的点:1.first=first.next表示的是移动first指针的位置。如果写first.next=first.next.next,则表示的是更改链表结构,这会跳过first指针的下一个节点,改变链表本身的结构。因此我区分清楚:仅仅需要移动first指针的位置,需要更改链表的结构。2. whilefirst:和whilefirst.next:都是判断条件,两者有不同的含义。whilefirst::判断的是first指针是否存在。只要first指针指向的节点(包括最后的None)存在,循环就会继续。whilefirst.next::判断的是first指针的下一个节点是否存在。只有当
24.两两交换链表中的节点这道题目正常模拟就可以了。建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。对虚拟头结点的操作,还不熟悉的话,可以看这篇链表:听说用虚拟头节点会方便很多?(opensnewwindow)。接下来就是交换相邻两个元素了,此时一定要画图,不画图,操作多个指针很容易乱,而且要操作的先后顺序初始时,cur指向虚拟头结点,然后进行如下三步:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SQAAnGzq-1686641211499)(https://code-thinking.cdn.bcebos.