需要帮助修复链接列表实现+追加方法

时间:2015-05-10 03:52:23

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

为了练习和准备编程采访,我通过解决Gayle McDowell的采访来解决问题。话虽如此,我一直在回答Python和Java中的所有问题。我现在正在python中使用链表,因为我已经用Java完成了所有这些。我在将货物/节点数据添加到链接列表的结尾/尾部时遇到问题。这在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

我遇到的问题是while循环后node.next设置为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

我希望如何修复或更改我的追加方法。

0 个答案:

没有答案