检查我的数据结构,以满足一些新的工作面试要求。所以我有一个链表的删除方法。public Link delete(int key) { Link current = first; Link previous = first; while(current.iData != key) { if(current.next == null) return null; else { previous = current; current = current.next; } } if(current == first) first = first.next; else // just bypass it previous.next = current.next; return current;}我想到目前为止我已经明白了。但我对这条线感到好奇。// just bypass itprevious.next = current.next;为什么我们不使用 覆盖head(在本例中表示为first)previous?或者会是错误的逻辑吗?喜欢// just bypass itprevious.next = current.next;first=previous;我的意思是previous和current只是迭代列表的指针。而删除后的真实数据位于右侧first?抱歉,如果这样想会很奇怪。有时我奇怪的直觉只是在研究算法时出现,主要是因为我有点弱
1 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
这样做会导致链表丢失前一个节点之前的所有节点。如果您有一个包含以下值的链接列表:
[1, 2, 3, 4, 5, 6, 7, 8]
当你打电话时delete(7)
,你的头会指向6
,然后你就会得到一个 的链接列表[6, 8]
。
添加回答
举报
0/150
提交
取消