编程实现链表基本操作,并自定义函数实现以下功能 (1)建立链表A和B,输入用空格隔开,-1结束。 (2)求2个链表的差A-B。具体做法是,对于链表A中的每个元素e,在链表B中进行查找,若存在与e相同的元素,则从A中将其删除。 (3)输出链表中的元素 (4)释放链表所占内存空间。
时间: 2023-07-11 22:18:02 浏览: 164
实现链表的基本操作。
实现链表基本操作的代码如下:
```c++
#include <iostream>
using namespace std;
// 链表结点
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
// 在链表尾部插入一个结点
void insert(ListNode*& head, int val) {
ListNode* newNode = new ListNode(val);
if (!head) {
head = newNode;
} else {
ListNode* cur = head;
while (cur->next) {
cur = cur->next;
}
cur->next = newNode;
}
}
// 释放链表所占内存空间
void clear(ListNode*& head) {
ListNode* cur = head;
while (cur) {
ListNode* tmp = cur;
cur = cur->next;
delete tmp;
}
head = NULL;
}
// 输出链表中的元素
void printList(ListNode* head) {
ListNode* cur = head;
while (cur) {
cout << cur->val << " ";
cur = cur->next;
}
cout << endl;
}
// 求2个链表的差A-B
void difference(ListNode*& A, ListNode* B) {
if (!A || !B) {
return;
}
ListNode* curA = A;
ListNode* preA = NULL;
while (curA) {
ListNode* curB = B;
bool found = false;
while (curB) {
if (curB->val == curA->val) {
found = true;
break;
}
curB = curB->next;
}
if (found) {
if (!preA) {
A = curA->next;
} else {
preA->next = curA->next;
}
ListNode* tmp = curA;
curA = curA->next;
delete tmp;
} else {
preA = curA;
curA = curA->next;
}
}
}
int main() {
// 建立链表A
cout << "请输入链表A中的元素,用空格隔开,-1结束:" << endl;
ListNode* A = NULL;
int val;
cin >> val;
while (val != -1) {
insert(A, val);
cin >> val;
}
// 建立链表B
cout << "请输入链表B中的元素,用空格隔开,-1结束:" << endl;
ListNode* B = NULL;
cin >> val;
while (val != -1) {
insert(B, val);
cin >> val;
}
// 求2个链表的差A-B
difference(A, B);
// 输出链表A中的元素
cout << "链表A中的元素为:" << endl;
printList(A);
// 释放链表所占内存空间
clear(A);
clear(B);
return 0;
}
```
使用示例:
```
请输入链表A中的元素,用空格隔开,-1结束:
1 2 3 4 5 -1
请输入链表B中的元素,用空格隔开,-1结束:
3 5 7 -1
链表A中的元素为:
1 2 4
```
阅读全文