移除单向链表中一个节点的代码进阶

来源:互联网 发布:nginx 设置逆向代理 编辑:程序博客网 时间:2024/06/03 20:46

struct linklist {

char type;

linklist * nextnode;

}

linklist *head ;

新手程序员

void  remove_list_element(linklist *element){

linklist *c = head;

linklist *pre = NULL;

while(c  != element){

pre = c;

c = c->next;

}

if(pre == NULL){

head = c->nextnode;

}else{

pre->nextnode = c->nextnode;

}

}

比较有经验的程序员

void remove_list_element(linklist *element){

unsigned int indirect = &head;

while(*indirect !=element){

indirect = &(*indirect)->nextnode;

}

*indirect = element->nextnode;

}

引申到实际生活中,就好比要在一个排好队的队伍中找到A,将它从队伍中移出来。找到这个人有两种方式

1、直接在队伍中一个一个询问是不是A,如果是,就需要告诉A的前一个人C,他后面的人以后不再是A,而换成了B。

2、在队伍中询问A的前一个人C它的后面是不是A,如果是,就告诉C它的后面以后换成B。

后一种方法,相比于前一种方法,有以下优点:

1、在寻找A的过程中只麻烦了一个人,效率更快。

2、兼容了A这个人排在队伍第一个这种特殊情况。

3、很明显,第二种的代码较为简短

阅读全文
1 0