需要帮助修复链表实现 + 追加方法
Need Help Fixing Linked List Implementation + append method
为了练习和准备编程面试,我通过破解 Gayle McDowell 的面试做问题集。也就是说,我一直在回答 Python 和 Java 中的所有问题。我目前正在 python 中使用 linked 列表,因为我已经在 Java 中完成了所有工作。我在将 cargo/node 数据添加到 linked 列表的 end/tail 时遇到问题。这在 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。我认为如果我遍历 linked 列表并将我的数据添加到尾端,这就是我将如何处理它。我的假设主要基于我在 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 的其余部分看起来像这样,以防万一您需要查看 link 列表的其余部分是如何实现的。
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
我希望获得有关如何修复或更改附加方法的指导。
好的,函数应该是这样的:
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
的节点。而且你显然有一个错字,你将节点本身设置为数据,而不是它的数据属性。
为了练习和准备编程面试,我通过破解 Gayle McDowell 的面试做问题集。也就是说,我一直在回答 Python 和 Java 中的所有问题。我目前正在 python 中使用 linked 列表,因为我已经在 Java 中完成了所有工作。我在将 cargo/node 数据添加到 linked 列表的 end/tail 时遇到问题。这在 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。我认为如果我遍历 linked 列表并将我的数据添加到尾端,这就是我将如何处理它。我的假设主要基于我在 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 的其余部分看起来像这样,以防万一您需要查看 link 列表的其余部分是如何实现的。
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
我希望获得有关如何修复或更改附加方法的指导。
好的,函数应该是这样的:
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
的节点。而且你显然有一个错字,你将节点本身设置为数据,而不是它的数据属性。