-->
当前位置:首页 > 题库 > 正文内容

函数题:删除链表中的重复数据

Luz3年前 (2022-03-29)题库841
程序的功能是:逆序创建一个键值为整数的链表 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






答案:若无答案欢迎评论

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。