3. 编程实现链表基本操作,并自定义函数实现以下功能 (1)建立链表A和B,输入用空格隔开,-1结束。 (2)求2个链表的差A-B。具体做法是,对于链表A中的每个元素e,在链表B中进行查找,若存在与e相同的元素,则从A中将其删除。 (3)输出链表中的元素 (4)释放链表所占内存空间。 结构体定义为: typedef struct LST { int num; struct LST *next; } LST; 运行结果示例: 请输入链表数据(整型)并以空格空开,以-1为最后一个数,回车结尾: 1 2 3 4 -1 请输入链表数据(整型)并以空格空开,以-1为最后一个数,回车结尾: 1 6 7 -1 输出A链表中删除后的结点信息: 2 3 4 输入提示:"请输入链表数据(整型)并以空格空开,以-1为最后一个数,回车结尾:\n" 输入格式:"%d" 输入提示:"请输入链表数据(整型)并以空格空开,以-1为最后一个数,回车结尾:\n" 输入格式:"%d" 输出提示:"输出A链表中删除后的结点信息:\n" 输出格式:"%4d"
时间: 2024-03-05 11:53:16 浏览: 44
以下是链表基本操作和自定义函数的实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct LST {
int num;
struct LST *next;
} LST;
// 创建链表
LST *createList() {
LST *head, *tail, *pnew;
int num;
head = tail = NULL;
scanf("%d", &num);
while (num != -1) {
pnew = (LST*)malloc(sizeof(LST));
pnew->num = num;
pnew->next = NULL;
if (tail == NULL) {
head = tail = pnew;
} else {
tail->next = pnew;
tail = pnew;
}
scanf("%d", &num);
}
return head;
}
// 求A-B
void substractList(LST *A, LST *B) {
LST *pre, *cur, *tmp;
pre = NULL;
cur = A;
while (cur != NULL) {
tmp = B;
while (tmp != NULL && tmp->num != cur->num) {
tmp = tmp->next;
}
if (tmp != NULL) {
if (pre == NULL) {
A = cur->next;
} else {
pre->next = cur->next;
}
free(cur);
cur = pre == NULL ? A : pre->next;
} else {
pre = cur;
cur = cur->next;
}
}
}
// 输出链表
void printList(LST *head) {
printf("输出A链表中删除后的结点信息:\n");
while (head != NULL) {
printf("%4d", head->num);
head = head->next;
}
printf("\n");
}
// 释放链表内存
void freeList(LST *head) {
LST *p;
while (head != NULL) {
p = head;
head = head->next;
free(p);
}
}
int main() {
LST *A, *B;
printf("请输入链表A数据(整型)并以空格空开,以-1为最后一个数,回车结尾:\n");
A = createList();
printf("请输入链表B数据(整型)并以空格空开,以-1为最后一个数,回车结尾:\n");
B = createList();
substractList(A, B);
printList(A);
freeList(A);
freeList(B);
return 0;
}
```
运行结果示例:
```
请输入链表A数据(整型)并以空格空开,以-1为最后一个数,回车结尾:
1 2 3 4 -1
请输入链表B数据(整型)并以空格空开,以-1为最后一个数,回车结尾:
1 6 7 -1
输出A链表中删除后的结点信息:
2 3 4
```
阅读全文