next(NULL) {} * }; */ class Solution { public: ListNode* sortList(ListNode* head) { return mergeSort(head); } //寻找链表中点,快慢指针,快的到达终点,慢的刚好到中点 //当链表的长度是奇数时,slow 恰巧停在中点位置;如果长度是偶数,slow 最终的位置是中间偏右:
1. 迭代 迭代法是最朴素的想法。其通过在原链表的基础上逐步改变每个节点的next指针的指向从而得到逆序链表。 优点:空间消耗较小(只需要在原链表的基础上改动)。 缺点:不断改动指针有可能绕晕初学者。 2. 栈 栈的特点是先进后出(FILO)。我们可以将链表倒序的过程想象成将链表的每个结点一个个压入栈中,再一个...
*/objectSolution{defrotateRight(head:ListNode, k:Int):ListNode= {if(head ==null)returnnullif(head.next ==null)returnheadvarold_tail = headvarlength =1//旋转问题可通过闭合链表解决while(old_tail.next !=null) { length +=1old_tail = old_tail.next } old_tail.next = head//确定断链位置,...
next(NULL) {} * }; */ class Solution { public: void reorderList(ListNode* head) { if(!head||!head->next||!head->next->next) return; ListNode *slow=head,*fast=head; while(fast->next&&fast->next->next)//寻找链表的中点 { slow=slow->next; fast=fast->next->next; } ListNode *p...
1 ≤ m ≤ n ≤ 链表长度。示例 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 声明 本文答案参考自 LeetCode 官方题解。解法1:递归 使用两个指针 left 和 right 开始时,left 和 fight 递归地 向右遍历,left 停在 位置m处的节点,right 停在 位置n处的...
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 方法一:双指针遍历 数据结构经典的单链表题,对我来说难点在于怎么用python实现指针的操作。 经过搜索后发现其实特别简单...(或者说并不需要严格意义上的指针) ...
Leetcode141. 环形链表 题目: 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第...
LeetCode刷题笔记2:两数相加(python实现) 题目描述: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会...
leetcode刷题笔记 二百零六题 反转链表 源地址:206. 反转链表 问题描述: 反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? //迭代 头插法/** ...
力扣leetcode.cn/problems/intersection-of-two-linked-lists/description/ 解题方法 1.双指针 由于给出的两个链表长度并不相同,而理解题意,相交元素后所有的元素相同,个数也相同,所以我们首先要做的是建立两个指针,并调整两个指针的位置,消除两个链表的高度差,方法如下: ...