函数题:删除链表中的重复数据
程序的功能是:逆序创建一个键值为整数的链表 L,编程实现将其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须按照原来顺序保存在另一个链表中。例如给定 链表L的各键值为 21→-15→-15→-7→15,则输出去重后的链表: 21→-15→-7,以及被删除的结点链表: -15→15。
### 函数接口定义:
c++
struct ListNode *Createlist(int n);
struct ListNode *Del_absrepeat( struct ListNode **head );
void Printlist(struct ListNode *head);
其中 n 和 head 都是用户传入的参数。 n 的值不超过int的范围,表示创建的链表结点数; head 是链表的头指针。
输入时在第一行给出 L 的结点总数n。随后输入n个整数值,链表按输入数据的逆序建立。
### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *Createlist(int n);
struct ListNode *Del_absrepeat( struct ListNode **head );
void Printlist(struct ListNode *head);
int main()
{
struct ListNode *head = NULL,*head2=NULL;
int n;
scanf("%d",&n);
head = Createlist(n);
printf("原始链表:");
Printlist(head);
head2=Del_absrepeat( &head );
printf("删除重复结点的链表:");
Printlist(head);
printf("被删除的结点组成的链表:");
Printlist(head2);
return 0;
}
void Printlist(struct ListNode *head)
{
struct ListNode *p;
for ( p = head; p != NULL; p = p->next )
printf("%d ", p->data);
printf("\n");
}
/* 请在这里填写答案 */
### 输入样例:
in
5
21 -15 -15 -7 15
### 输出样例:
out
原始链表:15 -7 -15 -15 21
删除重复结点的链表:15 -7 21
被删除的结点组成的链表:-15 -15
### 输入样例:
in
7
15 -15 -15 -15 15 -15 15
### 输出样例:
out
原始链表:15 -15 15 -15 -15 -15 15
删除重复结点的链表:15
被删除的结点组成的链表:-15 15 -15 -15 -15 15
答案:若无答案欢迎评论
### 函数接口定义:
c++
struct ListNode *Createlist(int n);
struct ListNode *Del_absrepeat( struct ListNode **head );
void Printlist(struct ListNode *head);
其中 n 和 head 都是用户传入的参数。 n 的值不超过int的范围,表示创建的链表结点数; head 是链表的头指针。
输入时在第一行给出 L 的结点总数n。随后输入n个整数值,链表按输入数据的逆序建立。
### 裁判测试程序样例:
c++
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int data;
struct ListNode *next;
};
struct ListNode *Createlist(int n);
struct ListNode *Del_absrepeat( struct ListNode **head );
void Printlist(struct ListNode *head);
int main()
{
struct ListNode *head = NULL,*head2=NULL;
int n;
scanf("%d",&n);
head = Createlist(n);
printf("原始链表:");
Printlist(head);
head2=Del_absrepeat( &head );
printf("删除重复结点的链表:");
Printlist(head);
printf("被删除的结点组成的链表:");
Printlist(head2);
return 0;
}
void Printlist(struct ListNode *head)
{
struct ListNode *p;
for ( p = head; p != NULL; p = p->next )
printf("%d ", p->data);
printf("\n");
}
/* 请在这里填写答案 */
### 输入样例:
in
5
21 -15 -15 -7 15
### 输出样例:
out
原始链表:15 -7 -15 -15 21
删除重复结点的链表:15 -7 21
被删除的结点组成的链表:-15 -15
### 输入样例:
in
7
15 -15 -15 -15 15 -15 15
### 输出样例:
out
原始链表:15 -15 15 -15 -15 -15 15
删除重复结点的链表:15
被删除的结点组成的链表:-15 15 -15 -15 -15 15
答案:若无答案欢迎评论