数据结构c语言版,求大神解答,写一下详细的过程,谢谢啊
展开全部
正好在复习数据结构,刚好碰到这个题了
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
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
请按任意键继续. . .
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
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
请按任意键继续. . .
上海华然企业咨询
2024-10-28 广告
2024-10-28 广告
在大语言模型的训练中,我们精心挑选了涵盖广泛领域的高质量文本数据。这些数据涵盖了新闻报道、学术论文、文学作品、社交媒体内容等多个维度,确保了模型能够学习到丰富的语言模式和知识结构。通过严格的清洗与去噪处理,我们确保了数据的准确性和多样性,以...
点击进入详情页
本回答由上海华然企业咨询提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询