相关疑难解决方法(0)

在单个链表中查找循环

如何检测单个链表是否有循环?如果它有循环,那么如何找到循环的起始点,即循环开始的节点.

linked-list

59
推荐指数
3
解决办法
7万
查看次数

为什么在链表中找到循环时为什么要将指针增加2,为什么不3,4,5呢?

我已经看过一个问题,讨论在链表中查找循环的算法.我已经阅读了Floyd的循环寻找算法解决方案,在许多地方提到我们必须采取两个指针.一个指针(慢/龟)增加一个,其他指针(更快/野兔)增加2.当它们相等时我们找到循环,如果更快的指针到达null,则链表中没有循环.

现在我的问题是为什么我们将指针增加更快2.为什么不是别的呢?增加2是必要的,或者我们可以将它增加X来得到结果.如果我们将指针增加2,或者可能存在需要增加3或5或x的情况,我们是否有必要找到一个循环.

algorithm linked-list cycle data-structures floyd-cycle-finding

51
推荐指数
5
解决办法
2万
查看次数

如何确定链接列表是否只使用两个内存位置进行循环

有没有人知道一个算法来查找链表是否只使用两个变量来遍历列表.假设您有一个链接的对象列表,它与哪种类型的对象无关.我在一个变量中有一个指向链表头部的指针,我只有一个其他变量来遍历列表.

所以我的计划是比较指针值以查看是否有任何指针相同.该列表的大小有限,但可能很大.我可以将两个变量都设置为头部,然后用另一个变量遍历列表,总是检查它是否等于另一个变量,但是,如果我确实打了一个循环,我将永远不会离开它.我认为它与遍历列表和比较指针值的不同速率有关.有什么想法吗?

algorithm loops linked-list cycle

44
推荐指数
3
解决办法
6万
查看次数

查找单链表是否为循环/循环的有效算法是什么?

如何查找单链表是循环/循环还是循环?我试图搜索但找不到满意的解决方案.如果可能,您能提供伪代码或Java实现吗?

例如:
1→交通3→交通5→交通71→交通45→交通7→交通5,其中第二个5实际上是列表的第三个元素.

java algorithm linked-list data-structures

37
推荐指数
3
解决办法
3万
查看次数

测试链表是否有循环的最佳算法

确定链表是否有循环的最佳(暂停)算法是什么?

[编辑]对时间和空间的渐近复杂性的分析将是甜蜜的,因此可以更好地比较答案.

[编辑]原始问题没有解决超过1的节点,但有一些关于它的讨论.这个问题更像是"在有向图中检测周期的最佳算法".

algorithm linked-list data-structures

32
推荐指数
1
解决办法
2万
查看次数

单次遍历中链接列表的中间点?

我试图找到循环开始的单链接列表的要点.我想到的是2个指针*慢,*快速移动速度是其他速度的两倍.如果列表在某个时刻有循环

    5-6-7-8
    |     |
1-2-3-4-7-7
Run Code Online (Sandbox Code Playgroud)

慢=快

可以有另一个优雅的解决方案,以便列表只遍历一次?

c hyperlink data-structures singly-linked-list

7
推荐指数
1
解决办法
1992
查看次数

链表循环 - 循环开始元素和列表长度

我读了关于链表检测算法的循环 ,我怀疑

1)如何检测"会议元素".例如,在以下情况中 - 如何检测会议是否在第3个元素?

在此输入图像描述

2)如何检测列表的长度(如果超过 - 6)

运行时间O(n),存储器O(1)中的两个问题.

algorithm linked-list floyd-cycle-finding

6
推荐指数
1
解决办法
2590
查看次数

识别列表中的循环或递归

我想在下面的节点结构中列出列表中的循环或递归.我该如何识别?

public class EntityNode {
    private EntityNode nextNode; // Points to the next node
}
Run Code Online (Sandbox Code Playgroud)

例,

Node1 -> Node2 -> Node3 -> Node4 -> Node5 -> Node6 -> Node4
Run Code Online (Sandbox Code Playgroud)

在这里,你可以看到它Node6指向Node4,并且这里出现循环或递归,我的代码将进入无限.那么如果我想找出具有最佳性能水平的这种情况呢?

java recursion loops list

6
推荐指数
2
解决办法
629
查看次数

证明链表的最快方式是循环?在python中

有人可以让我知道证明链表包含循环的最佳方法吗?我正在使用一个带有两个指针的算法,一个步骤缓慢移动一步,另一个步骤移动得更快.

class Node(object):
    def __init__(self, value, next=None):
        self.next=next
        self.value=value
def create_list():
    last = Node(8)
    head = Node(7, last)
    head = Node(6, head)
    head = Node(5, head)
    head = Node(4, head)
    head = Node(3, head)
    head = Node(2, head)
    head = Node(1, head)
    last.next = head
    return head

def is_circular(head):
    slow = head
    fast = head
    while True:
        slow = slow.next
        fast = fast.next.next
        print slow.value, fast.value
        if slow.value == fast.value:
            return True
        elif slow is fast:
            return False

if __name__ …
Run Code Online (Sandbox Code Playgroud)

python algorithm linked-list data-structures

4
推荐指数
1
解决办法
8512
查看次数

C++ 循环析构函数

在文件啊:

class B;
class A
{
public:
    B *b;
    A(B *b = nullptr)
    {
        this->b = b;
    }
    ~A()
    {
        delete this->b;
    }
};
Run Code Online (Sandbox Code Playgroud)

在文件 bh 中:

class A;
class B   
{
public:
    A *a;
    B(A *a = nullptr)
    {
        this->a = a;
    }
    ~B()
    {
        delete this->a;
    };
};
Run Code Online (Sandbox Code Playgroud)

让我们假设我们有一个指向 A *对象的指针,并且我们想要删除它:

// ...
A *a = new A();
B *b = new B();
A->b = b;
B->a = a;
// ...

delete a;

// ...
Run Code Online (Sandbox Code Playgroud)

A 的析构函数会说删除 B;即调用 …

c++

2
推荐指数
1
解决办法
1077
查看次数

如何使用循环查找链表的循环节点?

这个问题与找到2个链表的交集有点不同.

考虑一个带循环的链表:A - B - C - D - E - F - C.

如果node A是函数的输入,那么它应该返回C.

由于我不知道该怎么称呼C,我使用了一个术语循环节点,C如问题中所示.虽然O(n 2)项似乎很明显,但是有没有办法找到复杂度较低的循环节点?

不允许使用O(n)的哈希表/额外空间.

java algorithm linked-list data-structures singly-linked-list

2
推荐指数
1
解决办法
1992
查看次数

如何确定链接列表中循环的位置

链接列表中可能存在循环,如何确定循环在链接列表中的位置.

java linked-list data-structures

-1
推荐指数
1
解决办法
295
查看次数