ytu 2231: 交集问题(线性表)(数据结构,链表练习)
2231: 交集问题(线性表)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 6 Solved: 3
[Submit][Status][Web Board]
Description
设有两个单链表A,B,求出A,B的交集元素放到A中
Input
1 4 5 6 7 8
1 3 6 9 10 33
Output
1 6
Sample Input
11 14 54 6 4 83
11 3 6 9 10 83
Sample Output
11 6 83
HINT
Source
数据结构,链表练习。
对两个链表取交集输出。考验链表的实现和处理。作为练习题很适合。也纠结了不少时间。
代码:
1 #include <iostream>
2 #include <stdio.h>
3 using namespace std;
4 struct Node{
5 int num;
6 Node* next;
7 };
8 int main()
9 {
10 int n=0;
11 char c;
12 Node* head = new Node;
13 Node* p = new Node;
14 head->next = p;
15 //输入A链表
16 while((c=getchar())!='\n'){
17 if('0'<=c && c<='9'){ //c是数字
18 int t = c-'0';
19 n = n*10+t;
20 }
21 else if(c==' ' && n!=0){ //c是空格
22 p->num = n;
23 n = 0;
24 Node* cur = new Node;
25 p->next = cur;
26 p=cur;
27 }
28 }
29 p->num = n;
30 p->next = NULL;
31
32 getchar(); //两个链表中间有一个回车
33
34 Node* head2 = new Node;
35 Node* p2 = new Node;
36 p = p2;
37 head2->next = p;
38 n = 0;
39 //输入A链表
40 while((c=getchar())!='\n'){
41 if('0'<=c && c<='9'){ //c是数字
42 int t = c-'0';
43 n = n*10+t;
44 }
45 else if(c==' ' && n!=0){ //c是空格
46 p->num = n;
47 n = 0;
48 Node* cur = new Node;
49 p->next = cur;
50 p=cur;
51 }
52 }
53 p->num = n;
54 p->next = NULL;
55
56 //取交集,对A链表处理
57 p = head;
58 while(p->next!=NULL){
59 p2=head2->next;
60 while(p2!=NULL){
61 if(p->next->num==p2->num){
62 break;
63 }
64 p2 = p2->next;
65 }
66 if(p2==NULL){ //没有找到
67 Node* q = new Node;
68 q = p->next; //存储一会要销毁的空间地址
69 p->next=p->next->next;
70 delete(q); //销毁删掉的节点
71 }
72 else //找到了
73 p=p->next;
74 }
75
76 //输出
77 p=head->next;
78 while(p!=NULL){
79 cout<<p->num<<' ';
80 p=p->next;
81 }
82 cout<<endl;
83 /*
84 p=head2->next;
85 while(p!=NULL){
86 cout<<p->num<<endl;
87 p=p->next;
88 }
89 */
90 return 0;
91 }
Freecode : www.cnblogs.com/yym2013