c++写代码 请根据输入的逆序数据采用头插法创建一个单链表,然后删除相同的数据,仅保留一个。 【输入形式】逆序的数据,数据0代表输入结束
时间: 2024-02-03 11:11:18 浏览: 66
C++单链表的创建插入、删除
5星 · 资源好评率100%
以下是代码实现:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* createList() {
ListNode* head = NULL;
int val;
cin >> val;
while (val != 0) {
ListNode* node = new ListNode(val);
node->next = head;
head = node;
cin >> val;
}
return head;
}
void deleteDuplicates(ListNode* head) {
if (!head) return;
ListNode *prev = head, *cur = head->next;
while (cur) {
if (prev->val == cur->val) {
prev->next = cur->next;
delete cur;
cur = prev->next;
} else {
prev = cur;
cur = cur->next;
}
}
}
void printList(ListNode* head) {
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
ListNode* head = createList();
deleteDuplicates(head);
printList(head);
return 0;
}
```
在 `createList` 函数中,我们采用头插法创建单链表,即每次新建一个节点并将其插入到链表的头部。在 `deleteDuplicates` 函数中,我们使用双指针法遍历链表,如果发现相邻两个节点的值相同,则删除后面的节点。最后,在 `main` 函数中,我们先创建链表,然后删除重复的节点,并输出结果。
阅读全文