下面是在单链表中删除值相同的多余结点的核心代码,请将其程序补充完整。 typedef int datatype; typedef struct node { 第一空 data; struct node *next; }lklist; void delredundant(lklist *& head) { lklist *p,*q,*s; for(p=head;p!=0;p=p->next) { for(q= 第二空 ,s=q;q!=0; ) if (q->data==p->data) {s->next=q->next; free(q);q=s->next;} else { 第三空 ,q=q->next;} } }
时间: 2024-04-26 19:26:57 浏览: 8
typedef int datatype;
typedef struct node {
datatype data;
struct node *next;
} lklist;
void delredundant(lklist *& head) {
lklist *p, *q, *s;
for (p = head; p != 0; p = p->next) {
for (q = p->next, s = p; q != 0; ) { // s指向q的前一个节点
if (q->data == p->data) {
s->next = q->next; // 将s的下一个节点指向q的下一个节点
free(q); // 释放q节点的空间
q = s->next; // q指向下一个节点
} else {
s = q; // s指向q
q = q->next; // q指向下一个节点
}
}
}
}