链表
理想二旬
这个作者很懒,什么都没留下…
展开
-
判断单链表是否有环
判断单链表是否存在环,基本思想是:设置两个指针,first和second指针,first每次向前移动两步,second每次向前移动一步,若存在环,则在某个时刻,second必然和first相遇。相当于A和B在操场跑步,A的速度比B快一倍,则在某个时刻,A必然会追上B,俗称套圈。应用此思想,代码如下:public boolean hasCycle(Node head){ //如果链表为原创 2017-02-07 18:12:47 · 237 阅读 · 0 评论 -
求链表中环的长度
求链表中环的长度:如果链表中无环,则长度为0;所以需要先判断链表是否有环。此时要用到一个方法,见我另一篇博客,但是方法需要稍微变化一下:先求出快慢指针相遇的那个节点。这个节点一定存在于环上:因为快指针比慢指针快,如果他两者相遇,必然在环上相遇,不存在在链上(除环以外的区域)相遇的可能。 从此节点开始,循环一圈回到此节点时,便求出了环的长度。代码如下: //求环中相遇结点 public原创 2017-02-07 20:00:11 · 1428 阅读 · 0 评论 -
求链表中环的入口点
先判断是不是有环,然后求出环的长度,然后按照以下图示思路求出入口点 //求环中相遇结点 public Node cycleNode(Node head){ //链表为空则返回null if(head == null) return null; Node first = head; Node seco原创 2017-02-07 20:40:52 · 319 阅读 · 0 评论 -
求无环链表相交的第一个交点
两个无环链表相交,求第一个交点思路为:两链表相交为Y形状,采用对齐的思想,将V部分先对齐,设链表1长度为L1,链表2长度为L2,先砍掉|L1-L2|部分,使他们长度相等,即让一个指针指向较长的链表,并向后移动|L1-L2|个位置。然后让两个指针同时往后遍历。最后相遇的位置即第一个交点public Node findIntersectNode(Node head1,Node head2){原创 2017-02-07 21:50:22 · 297 阅读 · 0 评论 -
求有环链表相交的第一个交点
有环链表相交有三种情况: 其中第三种不存在所谓的相交点 所以首先需要判断属于三种情况中的哪一种 第一种情况和第二种情况相同即环入口点都相同 第三种情况两链表环入口点不同 判断方法见博客:http://blog.csdn.net/inspiredbh/article/details/54915790 然后再求相交第一个交点,方法参照无环链表相交的情况: http://blog.csdn.原创 2017-02-07 21:56:52 · 366 阅读 · 0 评论 -
链表基本问题集锦
import java.util.Stack;public class LinkList { public Node head;//头结点 public Node current; // 方法1:向链表中添加数据 public void add(int data) { if (head == null) { head = new No原创 2017-02-07 22:07:46 · 291 阅读 · 0 评论 -
判断单链表是否有环
判断单链表是否存在环,基本思路是:设置快慢两个指针,first和second指针,first每次向前移动两步,second每次向前移动一步,若存在环,则在某个时刻,second必然和first相遇。相当于A和B在操场跑步,A的速度比B快一倍,则在某个时刻,A必然会追上B,俗称套圈。应用此思想,代码如下: public boolean hasCycle(Node head){ //原创 2017-03-16 09:38:06 · 303 阅读 · 0 评论 -
判断有环链表是否相交
有环链表相交,首先两链表都要有环,一个有环一个无环不可能相交。有环链表相交有三种情况 则只需要判断是否共有一个环就行。 思路:分别取两链表上两个环内结点node1和node2,然后让node1遍历,如果与node2相遇,则代表位于一个环,反之,则不想交。 //求环中相遇结点 public Node cycleNode(Node head){ //链表为空则返回null原创 2017-02-07 21:21:52 · 460 阅读 · 0 评论 -
判断无环链表是否相交
判断无环链表是否相交思路:若两链表相交,则至少最后一个结点相同。判断两个链表最后结点是否相同来判断是否相交;public boolean isIntersect(Node head1,Node head2){ if( head1 == null|| head2 == null ) return false; while(head1 != null)原创 2017-02-07 21:01:23 · 406 阅读 · 0 评论