当前位置: 首页 > 知识库问答 >
问题:

如何返回链表的中间节点

高墨一
2023-03-14

当检查链表中的中间节点时,我对同时循环条件在链表中的工作方式感到困惑

这是正确的代码我有找到中间节点的链表

class Node(object):
    def __init__(self, data):
        self.data = data
        self.next = None


class linkedList(object):
    def __init__(self):
        self.head = None

    def append(self, data):
        node = Node(data)
        if self.head == None:
            self.head = node
        temp = self.head
        while temp.next:
            temp = temp.next
        temp.next = node

    def middle(self):
        first = self.head
        second = self.head
        while second and second.next:
            second = second.next.next
            first = first.next
        print(first.data)

如果我将while循环更改为

while second:

while second.next:

我收到一个错误,上面写着

AttributeError:“非类型”对象在第24行没有属性“下一步”

我只是想知道为什么拥有第二个代码和second.next代码很重要

共有2个答案

朱承载
2023-03-14

首先,你的append方法不起作用,并且陷入了无限的time循环中,因为你在添加第一个元素时没有退出append。正确的版本是

def append(self, data):
    node = Node(data)
    if self.head == None:
        self.head = node
        return
    else:
        temp = self.head
        while temp.next:
            temp = temp.next
        temp.next = node

至于你的另一个问题,我们想找到偶数和奇数列表的循环中间,秒。下一个覆盖奇数列表,第二个覆盖偶数列表,因为第二个指针将指向null,或者它本身将为null,如果您只使用其中一个,您将得到您描述的错误,因此您需要在while循环中同时具有这两个条件

陶淳
2023-03-14

解决方案使用两个指针。第一个一次走一步,第二个一次走两步。但是,在采取两个步骤时,有两件事需要验证:

  1. 还有下一步有效
  2. 上面提到的下一步之后还有一步

如果你跳过一个检查,它将进入循环,但在边界条件下,它找不到下一个。举个例子:如果有4个节点,而你只在第3个节点检查second.next,你将有second.next为有效,你将进入循环,但在里面您正在直接访问second.next.next

F、 S|1--

 类似资料:
  • 我有一个单链表。如果我想从这个链表中删除一个已知的元素,我能做什么? 例如:节点*头;(44)节点*尾部;(39) 链接列表:44 27 59 13 45 39我们想从中删除45。得到:4427591339 我只知道从列表中删除第一个元素(如果元素(需要删除)是列表的第一个元素)。我得到了:头=头- 如何从列表中删除中间节点?

  • 我试图从基于阉羊的双链表中删除一个元素,该列表中的节点满足返回bool的函数。由于某种原因,替换节点的前一个指针(下一个被删除)不更新,而是引用回它自己。 我的代码 测试结果

  • 本文向大家介绍C++删除链表中间节点的方法,包括了C++删除链表中间节点的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C++删除链表中间节点的方法。分享给大家供大家参考,具体如下: 题目: 给定链表头结点head,实现删除链表的中间节点函数。 解题思路及代码: 快慢指针,快指针走两步,慢指针一步。 当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。 链表结构定义: 算法

  • 问题内容: 这段代码是一个表,可以选择“惰性名称”,“删除”,“显示”和“退出”。 该代码运行良好,但是我唯一的问题是如何删除节点中的所选名称 *我不知道如何删除节点。我应该在删除方法上加上什么? 问题答案: 要删除Node,您实际上需要更新它的上一个节点的位置以删除Node的位置,而剩下的Node最终将被垃圾回收。 如果要删除的节点是根节点,则只有一个问题,然后更新根节点。

  • 我正在尝试使用(不平衡的)BST实现树集。我还希望为树中的所有节点维护一个有序的双链接列表。 链表是在2个前哨节点的帮助下维护的,一个头节点和一个尾节点。因此,要遍历链表,您需要从头节点开始,检查它的属性。 我有一个递归的方法,就像这样; 其中和设置在链表中将插入新节点的位置的边界。 我在维护节点的和属性时遇到了问题。

  • 我有麻烦删除双向链表中的节点,程序崩溃,我不能解决这个问题。你能帮我吗?这是创建新节点,查看它们并删除它们的完整代码。 我认为这个问题与Node del的scanf()有关,但我不确定。当我只是通过或