Python中如何向他人清晰地解释链表相关问题?

拆分链表:

class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

mid = # find the middle node of linked list

l1 = head l2 = mid.next mid.next = None

这个时候 l1 指向链表前半部分,l2 指向链表后半部分,并且链表已经断开为两条。还是比较容易理解。

被问“可是 mid.next 之前指向的是后半部分链表,为什么把它设置为 None 不会影响后半部分链表,为什么 l2 不会变成 None ?“

要把这里的全理解成指针,l2 指向的这个 node 带着所有后半部分链表,而 mid.next 也是指针,它们是存在不同位置的指针,l2 是我们新开辟的位置,但一开始 l2 和 mid.next 指向的是同一个 node,我们更改 mid.next 的指向并不会影响 l2 的指向。

大佬们还有什么建议的好的解释么?


Python中如何向他人清晰地解释链表相关问题?

6 回复

自己画个图出来,一清二楚。mid.next 指向下一块,l2 也指向下一块。mid.next 为 None 跟下一块在不在一毛钱关系都没有啊


链表的核心就是“节点”和“连接”。每个节点里存着数据和指向下一个节点的“指针”。你可以把它想象成一串珍珠项链,每颗珍珠(节点)都连着下一颗,但你不能直接跳到中间那颗,得从头一颗颗摸过去。

跟列表最大的区别就在这儿:列表在内存里是连续排队的,找第5个元素一步到位;链表是散装的,找第5个得从第1个开始往后数4次。所以链表插删元素快(改个指针就行),但查找慢。

跟人解释时,画图最管用。画几个方块当节点,里面写上data和next,用箭头把next指到下一个方块。现场手动画一遍插入、删除的箭头怎么改,比说一百句都清楚。

总结:画图解释节点和指针的变化最直观。

b = 100
a = b
b = 0

b 的值已经赋值给 A 了,现在 b 再赋值自然不会影响 a

mid.next 和 l2 是对同一个对象的不同引用 改变其中一个并不会影响另一个

感谢各位,最终画了个图,再理了理引用类型

差不多解释通了

回到顶部