删除对偶数 下面有结构node的定义,指针head中存放着node节点组成的单向链表的首节点地址。 函数node* deleteDual(node* head, node* tmp)的功能是将节点tmp的“对偶”节点删除,并返回新链表。 所谓的“对偶”节点是指他们的data值的和为0。 完成程序,只在Program和End之间增加代码。 输入格式: 输入的第一行包含一个整数n和n个整数。 输入的第二行包含一个整数k和k个整数。 输出格式: 输出为删除之后的链表。 输入样例: 5 2 3 11 -17 23 3 5 -3 17 输出样例: 2, 11, 23
时间: 2024-03-17 11:40:44 浏览: 85
数据结构与算法 python–第三节 链表之单向链表
Program:
```c++
#include<iostream>
#include<cstdio>
using namespace std;
struct node{
int data;
node* next;
node(int x): data(x), next(NULL){}
};
node* deleteDual(node* head, node* tmp){
if(head == NULL || tmp == NULL) return head;
if(tmp == head) head = head->next;
else{
node* p = head;
while(p->next != tmp) p = p->next;
p->next = tmp->next;
}
node* q = tmp->next;
delete tmp;
tmp = NULL;
deleteDual(head, q);
return head;
}
int main(){
int n, k;
scanf("%d", &n);
node* head = NULL;
node* tail = NULL;
for(int i = 0; i < n; ++i){
int x;
scanf("%d", &x);
if(head == NULL){
head = new node(x);
tail = head;
}
else{
tail->next = new node(x);
tail = tail->next;
}
}
scanf("%d", &k);
for(int i = 0; i < k; ++i){
int x;
scanf("%d", &x);
node* p = head;
while(p != NULL){
if(p->data + x == 0){
head = deleteDual(head, p);
break;
}
p = p->next;
}
}
node* p = head;
while(p != NULL){
printf("%d", p->data);
if(p->next != NULL) printf(", ");
p = p->next;
}
printf("\n");
return 0;
}
```
End.
阅读全文