Chapter 2 Linked Lists - 2.3

Problem 2.3: Implement an algorithm to delete a node in the middle of a single linked list, given only access to that node.
EXAMPLE
Input: the node 'c' from the linked list a->b->c->d->e
Result: nothing is returned, but the new linked list looks like a->b->d->e


At first sight, it is impossible to solve it without information of the left segment of the linked list. However, I quickly found that we can not only reorganize relations among nodes, but also change the data of nodes. The solution is given below:
class node:
    def __init__(self, data = None):
        self.data = data
        self.next = None

def delete_middle(node):
    # Shift the values of nodes
    # and the value of given node will
    # be overwritten (deleted)
    node_pre = None
    while node.next != None:
        node_pre = node
        node.data = node.next.data
        node = node.next
    # Delete the last node
    node_pre.next = None
    del node
However, my solution is not better than the one answer page. Actually, we can just shift once and delete the next node.
def delete_middle(node):
    node.data = node.next.data
    node_next = node.next
    node.next = node.next.next
    del node_next
Next time when I come up with a idea that seems "smart", I should try to verify it and improve it, rather than implement it.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值