已知一个带有表头结点的单链表,结点结构为(data,next),假设该链表只给出了头指针L,请设计一个时间和空间上尽可能高效的算法,将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同。 根据设计思想,采用C或C++或Java语言描述算法,关键之

admin2014-04-17  29

问题 已知一个带有表头结点的单链表,结点结构为(data,next),假设该链表只给出了头指针L,请设计一个时间和空间上尽可能高效的算法,将单链表中值重复的结点删除,使所得的结果表中各结点值均不相同。
根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。

选项

答案算法实现如下: LinkList RemovesameNode(LinkList L) //删除重复结点的算法 { LinkList p,q,r; p=L一>next; while(p) //p用于遍历链表 { q=p; while(q->next) //q遍历p后面的结点,并与p数值比较 { if(q一>next一>data==p一>data) { r=q一>next; //r保存需要删掉的结点 q一>next=r一>next; //需要删掉的结点的前后结点相接 free(r); } else q=q一>next; } p=p一>next; } retUrn L; }

解析
转载请注明原文地址:https://kaotiyun.com/show/jexi777K
0

最新回复(0)