你如何从链表中删除n个元素?
例如..给定开始,结束索引2,4。
我的清单包含:
1, 4, 6, 7, 8, 4
电话结束后,(6,7,8应该不见了)我的清单包含:
1, 4, 4
好的,现在我知道如何删除给定索引处的元素。但我仍然不知道如何删除多个元素。
if(index == 0) {
front = front.next;
} else {
ListNode current = front;
for (int i = 0; i < index - 1; i++) {
current = current.next;
}
current.next = current.next.next;
}
答案 0 :(得分:1)
在起始索引之前发现节点(让我们称之为firstNode)和结束索引中的节点(让我们称之为lastNode),然后将firstNode链接到lastNode并让其他节点释放。不要担心内存泄漏,GC会注意隔离岛并将其从内存中删除。
在伪代码中(因为它是你实现它的功课):
function removeNodes (int startIndex, int endIndex)
if startIndex > endIndex or startIndex < 0 then
exit function
end if
Node firstNode, lastNode
firstNode <- head
int currentIndex = 0
while currentIndex < startIndex
firstNode <- firstNode->next
currentIndex <- currentIndex + 1
end while
lastNode <- firstNode->next
currentIndex <- currentIndex + 1
while lastNode is not null and currentIndex <= endIndex
lastNode <- lastNode->next
currentIndex <- currentIndex + 1
end while
if lastNode is not null
firstNode->next = lastNode->next
else
firstNode->next = null
end if
//if you happen to have a size field for your LinkedList class,
//update it as needed...
end function