【问题标题】:Need Help Fixing Linked List Implementation + append method需要帮助修复链表实现 + 附加方法
【发布时间】:2015-05-10 03:52:22
【问题描述】:

为了练习和为编程面试做准备,我通过完成 Gayle McDowell 的面试中的问题集来做准备。话虽如此,我一直在回答 Python 和 Java 中的所有问题。我目前正在使用 python 中的链表,因为我已经在 J​​ava 中完成了这一切。我在将货物/节点数据添加到链接列表的末尾/尾部时遇到问题。这在 Java 中不是问题,我想我的第一个错误是我试图以与在 Java 中相同的方式实现此方法。

这是我需要帮助的方法

  def append(self, data):.
        new_node = Node()
        new_node = data
        node = self.cur_node
        while node:
            node = node.next
        node.next = new_node

我遇到的问题是 node.next 在 while 循环之后设置为 None。我认为如果我遍历链表并将我的数据添加到尾部,这就是我将如何去做。我的假设主要基于我如何在 Java 中实现它,我在下面添加仅供参考。

 void appendToTail(int d){

        Node end = new Node(d); //Item to append to the end
        Node n = this; //To access Class object next

        while(n.next != null){
            n = n.next;
        }
        n.next = end;
    }

我的 python 类的其余部分看起来像这样,以防您需要查看链接列表的其余部分是如何实现的。

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

class LinkedList(object):
    def __init__(self):
        self.cur_node = None

    def add(self, data):
        new_node = Node()
        new_node.data = data
        new_node.next = self.cur_node
        self.cur_node = new_node

    #write a method that appends to the tail instead of the head
    def append(self, data):.
        new_node = Node()
        new_node.data = data
        node = self.cur_node
        while node:
            node = node.next
        node.next = new_node #This is the problem line

    def list_print(self):
        node = self.cur_node # cant point to ll!
        while node:
            print node.data, 
            node = node.next

    # answer to question 2_1
    # Write code to remove duplicates from an unsorted linked list
    def remove_dup(self):
        lset = set()
        previous = Node()
        node = self.cur_node
        while node:
            if node.data in lset:
                previous.next = node.next
            else:
                lset.add(node.data)
                previous = node
            node = node.next

我想要一些关于如何修复或更改我的附加方法的指导。

【问题讨论】:

  • 我很确定您需要将while node: 更改为while node.next:,但我将对此进行测试以确定。
  • 你为什么要做new_node = Node(),然后马上用new_node = data扔掉它?应该是new_node.data = data 还是类似的东西?
  • 是的,我的错误是 new_node.data = data
  • 大声笑,这就是问题所在!傻我。
  • 祝你面试练习顺利。我现在也处于同样的境地……压力很大。

标签: python linked-list singly-linked-list


【解决方案1】:

好的,函数应该是这样的:

def append(self, data):
    new_node = Node()
    new_node.data = data
    node = self.cur_node
    while node.next:
        node = node.next
    node.next = new_node #This is the problem line

您正在使用原始 while 条件遍历列表末尾。相反,您想停在最后一个节点上,即带有next == None 的节点。而且你显然有一个错字,你将节点本身设置为数据,而不是它的数据属性。

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多