从链接列表中删除n个元素(在此处理节点)

时间:2014-03-06 06:16:12

标签: java linked-list nodes

你如何从链表中删除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;
}

1 个答案:

答案 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