参考:http://blog.csdn.net/wenqian1991/article/details/17452715 上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上面文章的分析.仔细推倒一下 , 一般设置 快指针 速度是 慢指针的2倍.及 快指针每次遍历两个指针, 慢指针每次遍历1个指针. 假设上图 快慢指针 在E点相遇,那 相遇点离循环节点D 之间距离是X.  头结点A 离循环节点D 距离为K. 那么在两指针相遇时,各自走过得距离(这里可以吧上图想成是 一个…
上面分析了 根据这张图 推倒出 数学公式. 刚接触 不能一下弄明白.下面结合上面文章的分析.仔细推倒一下 , 一般设置 快指针 速度是 慢指针的2倍.及 快指针每次遍历两个指针, 慢指针每次遍历1个指针. 假设上图 快慢指针 在E点相遇,那 相遇点离循环节点D 之间距离是X.  头结点A 离循环节点D 距离为K. 那么在两指针相遇时,各自走过得距离(这里可以吧上图想成是 一个操场,起点不在操场内): 慢指针: K + X + n*(X+Y) = m;//X+Y 绕环一圈的距离:n 慢指针 总共绕…
双向循环链表  和 单向循环链表 查找循环节点 思路都是一样. 快慢指针查找法. 理论可参考 c 链表之 快慢指针 查找循环节点 typedef struct Student_Double { ]; int point; struct Student_Double *preStu; struct Student_Double *nextStu; } StudentDouble; StudentDouble * CreateDoubleCircleLink_Table(){ ; StudentDo…
Sort a linked list in O(n log n) time using constant space complexity. 链表,快慢指针找中点,归并排序. 注意判断条件fast->next!=NULL&&fast->next->next!=NULL,若为fast!=NULL&&fast->next!=NULL则会出现内存溢出 /** * Definition for singly-linked list. * struct Lis…
循环链表 稍复杂点. 肯能会有0 或 6 字型的单向循环链表.  接下来创建 单向循环链表 并 查找单向循环链表中的循环节点. 这里已6字型单向循环链表为例. //创建 循环链表 Student * CreateCircleLink_Table(void){ ; Student *head = NULL; head = (Student *)malloc(sizeof(Student)); head->name[]='\0'; head->point = ; head->stu = NU…
Given a linked list, return the node where the cycle begins. If there is no cycle, returnnull. Follow up:Can you solve it without using extra space? 快慢指针找重合判断是否循环.而后fast从头开始+1,slow继续前进直到重合 思路解析: 首先我们看一张图; 设:链表头是X,环的第一个节点是Y,slow和fast第一次的交点是Z.各段的长度分别是a…
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes' values. For example,Given{1,2,3,4}, reorder it to{1,4,2,3}. 由于链表尾端不干净,导致fast->next!=NULL&&fast->next-&…
题目描述: 请判断一个链表是否为回文链表. 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题? 思路分析: 思路一:借助辅助栈和辅助队列,链表节点依次入队列和入栈,依次出栈和出队,判断是否相等即可 /** * Definition for singly-linked list. * public class ListNode { * int val;…
解题思路 本题是在141. 环形链表基础上的拓展,如果存在环,要找出环的入口. 如何判断是否存在环,我们知道通过快慢指针,如果相遇就表示有环.那么如何找到入口呢? 如下图所示的链表: 当 fast 与 slow 第一次相遇时,有以下关系: fast = 2 * slow slow = a + n*b - c // 假设 slow 走了 n 圈 fast = a + m*b - c // 假设 fast 走了 m 圈 那就有: a + m*b - c = 2*(a + n*b - c) 继而得到:…
#include"head.h" struct Student* del_same_ID(struct Student*p1, struct Student*p2) { struct Student *p0 = p1; struct Student *head_a = p1; struct Student *head_b = p2; while (p1 != NULL)//终止条件是查询到a链表最后一个元素 { p2 = head_b; //b链表总是从头指针开始循环 ) &&…
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes' values. For example,Given {1,2,3,4}, reorder it to {1,4,2,3}. Subscribe to see which companies asked this quest…
引入 快慢指针经常用于链表(linked list)中环(Cycle)相关的问题.LeetCode中对应题目分别是: 141. Linked List Cycle 判断linked list中是否有环 142. Linked List Cycle II 找到环的起始节点(entry node)位置. 简介 快指针(fast pointer)和慢指针(slow pointer)都从链表的head出发. slow pointer每次移动一格,而快指针每次移动两格. 如果快慢指针能相遇,则证明链表中有…
题目描述 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定的有序链表: [-10, -3, 0, 5, 9], 一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5 解题思路 题目说给定的单链表是有序的,要转换为高度平衡的二叉搜索树,也就是说这个链表是树的前序遍历. 因此…
题目描述 给定一个链表,判断链表中是否有环. 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环.注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况. 如果链表中存在环,则返回 true . 否则,返回 false . 进阶: 你能用 O(1)(即,常量)内存解决此问题吗? 提示: 链表中节点的数目范围是 [0,…
解题思路 找到后半部分链表,再反转.然后与前半部分链表比较 代码 /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { val = x; } * } */ public class Solution { public bool IsPalindrome(ListNode head)…
解题思路 使用快慢指针.这里要注意的是,while 的条件会影响当中间节点有两个时,slow 指向的是第一个,还是第二个节点. // 返回的是第一个 while(fast.next != null && fast.next.next != null) // 返回的是第二个 while(fast != null && fast.next != null) 代码 /** * Definition for singly-linked list. * public class Li…
jQuery.parent(expr)           //找父元素 jQuery.parents(expr)          //找到所有祖先元素,不限于父元素 jQuery.children(expr)        //查找所有子元素,只会找到直接的孩子节点,不会返回所有子孙 jQuery.contents()            //查找下面的所有内容,包括节点和文本. jQuery.prev()                //查找上一个兄弟节点,不是所有的兄弟节点 jQue…
上次我们学习了环形链表的数据结构,那么接下来我们来一起看看下面的问题, 判断一个单向链表是否是环形链表? 看到这个问题,有人就提出了进行遍历链表,记住第一元素,当我们遍历后元素再次出现则是说明是环形链表,如果没有这是一个单向非环形链表. 我们来分析下上述的解决方法,我们分析这个程序的时间复杂度则是O(n).  那么是不是最优的选择呢? 我们引入新的解决思路,那就是“快慢指针”. 我们来看看接下来的解决思路,是否比上面的思路有优化的地方. 思路: 当我们在遍历链表的时候,我们设计两个指针,分别是快…
leetcode很多题目都是利用快慢指针来解决题目,下面具体讲解下快慢指针. 概念: 快指针在每一步走的步长要比慢指针一步走的步长要多.快指针通常的步速是慢指针的2倍.在循环中的指针移动通常为:faster = faster.next.next, slower = slower.next. 应用: 1. 用来找中点或中位数 2. 用来判断链表是否有环以及寻找环入口 3. 题目中含有:倒数第n个,那么设置快指针步长为n,然后快慢指针同时以同一速度走,用慢指针寻找倒数第n个 注意: 1. 通常需要特…
题目:删除链表的倒数第N个节点 难度:Medium 题目内容: Given a linked list, remove the n-th node from the end of list and return its head. 翻译:给定一个链表,删除倒数第n个节点并返回其头部. Example: Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, t…
题目 Given a linked list, remove the n-th node from the end of list and return its head. *Example: Given linked list : 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5. Note: Give…
剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. ​ 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6,则这个链表的倒数第 3 个节点是值为 4 的节点. ​ 链表节点的定义如下: struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {…
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1.2.3.4.5.6.这个链表的倒数第3个结点是值为4的结点. 链表的节点定义如下,这里使用的是C#来定义: public class Node { public int Data { get; set…
题目链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 题目描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 思路: 使用快慢指针, 快指针先移n个节点 接下来,快慢指针一起移动,两指针之间一直保持n个节点,当快指针到链表…
22.删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 答案解析: /** * Definition for singly-linked list. * public class ListNode { * int va…
题目: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: ->->->->, 和 n = . 当删除了倒数第二个节点后,链表变为 ->->->. 说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 1.解题思路: 快慢指针实现即可.快指针指向第N个节点.慢指针指向第一个节点,然后两个指针依次指向下一个节点,直到慢指针到达链表的末尾. /** * Definition for singly-linked…
// 读者对象:对TinyXml有一定了解的人.本文是对TinyXml工具的一些知识点的理解. // 1 TinyXml中对TiXmlNode进行了分类,是用一个枚举进行描述的. // enum NodeType // { // DOCUMENT, 文档节点 // ELEMENT, 元素节点 // COMMENT, 还没弄清楚 // UNKNOWN, 未知节点 // TEXT, 文本节点 // DECLARATION, 声明节点 // TYPECOUNT 还没弄清楚 // }; // TiXml…
解题思想: 1.创建一个结点类(为后面实现链表做基础) 2.创建一个查询倒数元素的方法 3.使用快慢指针的思想(主要的部分) 图中的表示的是查询倒数第k个结点的操作: 创建一个快慢指针后pre(慢指针)指向的第一个结点,在通过k的具体数值来移动p1(快指针),让它们之间包含k个结点(包括它们自身),然后不断的将p1和pre向后移动,直到p1移动到最后一个结点的,此时pre所指的即为倒数第k个的结点. 代码如下: public class InquiryNode { public static v…
删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的. 方法一解题思路:要求删除倒数第N个节点,可以先设两个指针同时指向链表的第一个节点,一个指针遍历链表统计出总共有多少个节点记为i,用总数减去N,即可以算出要删除的节点为正数第几个节点记为index=i-N,让…
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 因为链表的节点只有next指针,并且我们的题目要求只能扫描一次就完成删除,所以我们不能简单的创建一个数组来解决问题,所以我们可以这样来: (1)删除倒数第N个节点,我们让一个快指针指向正向第N个…