数据结构c语言版,求大神解答,写一下详细的过程,谢谢啊

2024年11月18日 18:43
有1个网友回答
网友(1):

正好在复习数据结构,刚好碰到这个题了

#include
#include
#include
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
LinkList Create(LinkList la); //创建一个单链表
void TravelList(LinkList la); //遍历单链表
void DeleteRlist(LinkList la); //删除重复结点
int main() {
LNode la;
LinkList n;
n = Create(&la);
printf("原始单链表:\n");
TravelList(n);
DeleteRlist(n);
printf("删除重复结点后的单链表:\n");
TravelList(n);
return 0;
}
LinkList Create(LinkList la) { //创建一个单链表(头插法)
int num;
la = (LinkList)malloc(sizeof(LNode));
la->next = NULL;
printf("请输入一个单链表(以-1结束):\n");
scanf("%d", &num);
while (num != -1) {
LNode *p = (LinkList)malloc(sizeof(LNode));
p->data = num;
p->next = la->next;
la->next = p;
scanf_s("%d", &num);
}
return la;
}

void TravelList(LinkList la) { //遍历单链表输出
LinkList p = la->next;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

void DeleteRlist(LinkList la) { //删除重复结点
LNode *p, *q, *r;
p = la->next;//指向第一个结点
if (p == NULL) return;
while (p->next) {
q = p;
while (q->next) {//从*p后面开始找重复结点
if (q->next->data == p->data) {
//printf("%d ", p->data);
r = q->next;//找到重复结点用r指向,删除r;
q->next = r->next;
free(r);
}
else q = q->next;
}
p = p->next;//指向下一个继续
}
}


请输入一个单链表(以-1结束):
8 8 9 5 3 5 8 3 2 0 1 -1
原始单链表:
1 0 2 3 8 5 3 5 9 8 8
删除重复结点后的单链表:
1 0 2 3 8 5 9
请按任意键继续. . .