描述
給定兩個遞增的整數集合a和b,分別用鍊錶表示集合a和b,求出a和b的交集,並存放在a中。要求空間複雜度為o(1)。
輸入多組資料,每組資料有三行,第一行為序列a和b的長度n和m,第二行為序列a的n個元素,第三行為序列b的m個元素(元素之間用空格分隔)。n=0且m=0時輸入結束。
輸出對於每組資料輸出一行,為a和b的交集,每個資料之間用空格分隔。
輸入樣例 1
5 5輸出樣例 11 3 5 7 9
1 2 3 4 5
3 41 2 5
2 4 5 6
0 0
1 3 52 5
#include using namespace std;
typedef struct lnodelnode,*linklist;
void initlist(linklist &l)
void createlist_r(linklist &l,int n)
return;
}void show(linklist &l)
coutnext;
while(pa&&pb)
//這一塊可以不要
//後移操作:
pa=pa->next;
pb=pb->next;
} else if(pa->data > pb->data) pb=pb->next;
else if(pa->data < pb->data) pa=pa->next;
}//cout//賦值,使a截斷
pc->next=null;//key
delete b;
return;
}void interaction(linklist &a,linklist &b,linklist &c)
} }pc->next=null;
delete b;
c=a;
return;
}int main()
return 0;
}
兩個鍊錶交集
題目給定兩個鍊錶,兩個鍊錶有一部分是一樣,求給出兩個鍊錶交集開始的地方。方法1步驟1 求先求出兩個鍊錶的長度差,然後讓 步驟2,長度較長的鍊錶,向後移動長度差。使得兩個鍊錶後續遍歷長度相同,步驟3 最後移動兩個指標,一次對比資料,def getintersectionnode heada,headb...
計算兩個集合的交集
include include include define number1 7 define number2 5 void createcollect int int void display int int int main printf 集合1 display collection1,numb...
兩個有序鍊錶序列的交集
已知兩個非降序鍊錶序列s1與s2,設計函式構造出s1與s2的交集新鍊錶s3。輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用 1 表示序列的結尾 1 不屬於這個序列 數字用空格間隔。在一行中輸出兩個輸入序列的交集序列,數字間用空格分開,結尾不能有多餘空格 若新鍊錶為空,輸出null。1 ...