从单个链表中删除节点

时间:2013-12-07 07:01:11

标签: python algorithm data-structures linked-list

一位采访者问我“单链表”的以下问题。

Q值。如果我们删除一个节点,在单个链表中,我们需要重新链接如下:

# deleting current_node say node 3
previous_node = node2
node3 = previous_node.next
next_node = node3.next
previous_node = next_node

所以,如果我们没有previous_node(这只是面试官提出的问题),那么你将如何链接下一个节点。

我的答案:在单个链表中没有选项可以遍历,因为current_node没有关于前一个节点的任何信息。但他对我的回答并不满意。

有人可以给我一些启示。

由于

2 个答案:

答案 0 :(得分:4)

以下是这样做的方法: -

  1. 开始头部和遍历直到当前 - >下一个==目标

  2. current-> next = target-> next

  3. 删除目标

答案 1 :(得分:1)

Q值。他从单个链表中删除了一个节点,并且他没有上一个节点的引用,有没有办法将前一个节点与next.next节点重新链接?

如果列表是循环的呢?然后,可以重新链接O(n)复杂度。

在你的程序中

def go_backwards(node_ref):
    if node_ref == None:
        return
    head = node_ref
    _next = node_ref.next
    go_backward(_next)
    print head,

您正在以相反的顺序打印列表,而不是实际反转它。

def go_backwards(node_ref):
    head = node_ref
    _next = node_ref.next
    if _next == None:
        return node_ref 
    node = go_backward(_next)
    _next.next = head
    return node

现在,它将返回反向链接列表。