2014-02-23 148 views
0

我想从列表中删除k数字元素。我会像下面这样做(伪代码)单链表,删除k元素

delete(L,k) 

x <- L.head 
i <- 1 
while(i < k-1 AND x.next != NULL) 
    x<-x.next 
    i <- i+1 
if(i = k-1 AND x.next != NULL) 
    if(x.next.next != NULL) 
     x.next <- x.next.next 
    else if(x.next.next = NULL) 
     x.next = NULL 

我的目的是:如果k是最后一个,那么删除k-1.next。如果k不是最后一个,则将k-1.next指向k + 1。这是个好主意吗?

回答

2

您的链接列表删除方法似乎大多是正确的。

你为什么从一个数值计算?你想的头是一个虚拟节点,它不包含任何值(那么你就可以保持一个空列表),如果是这样尝试:当你要删除的第一个项目

i=0 
while(i <= k && x.next != null) 

然后(K = 1) while循环将执行一次。否则,使用

while(i = k && x.next !=null) 

同样,在第一个if语句变化k-1k

我不知道你为什么使用IF ELSE,因为如果它的x.next.next为null,那么你只需要指定null。

问题是您的计数器值与删除值。尝试删除列表中的第一项。

+0

谢谢。你的意思是L.head应该是空的? – user3162968

+0

接下来的事情:如果循环继续,直到我= k,然后我们删除k.next,我们删除k + 1元素,不是吗? – user3162968

+1

我的意思是,如果你想让你可以使L.head总是空的作为创建一个空链表(只包含头部的列表)的一种方式。否则,当你删除列表中唯一的项目时,你没有列表。你不需要。 – user2590835