1. 程式人生 > 其它 >|reverse(v1.begin(),v2.end())&swap(v1,v2)&塊數&next不同的第j塊|19秋-1161-Merging Linked Lists(25分)

|reverse(v1.begin(),v2.end())&swap(v1,v2)&塊數&next不同的第j塊|19秋-1161-Merging Linked Lists(25分)

技術標籤:PAT甲

在這裡插入圖片描述

連結串列存在vector裡,不用再通過order來cmp來排序了
reverse(v1.begin(),v1.end())
swap(v1,v2)

#include <iostream>
#include <vector>
using namespace std;
int const maxn = 100010;

struct Node {
	int address, data, next;
	int order;
}node[maxn],node1[maxn],node2[maxn];

vector<Node>v1, v2;

int
main() { int s1, s2, n; cin >> s1 >> s2 >> n; for (int i = 0; i < maxn;i++) { node[i].order= 2 * maxn; } for (int i = 0; i < n; i++) { int address; cin >> address; node[address].address = address; cin >> node[address].data >> node[address].next;
} int p1; for (p1 = s1; p1 != -1; p1 = node[p1].next) { v1.push_back(node[p1]); } int p2; for (p2 = s2; p2 != -1; p2 = node[p2].next) { v2.push_back(node[p2]); } if (v1.size() < v2.size())swap(v1, v2);//v2存小的 reverse(v2.begin(), v2.end()); //i<2 //v1存長的 //第i塊 //把短的先輸出 for (int i =
0; i < v2.size(); i++) { int j; for (j = 0; j < 2; j++) { if (j == 0) printf("%05d %d %05d\n", v1[i * 2 + j].address, v1[i * 2 + j].data,v1[i*2 +j+1].address); else printf("%05d %d ", v1[i * 2 + j].address, v1[i * 2 + j].data); } printf("%05d\n", v2[i].address); printf("%05d %d ", v2[i].address, v2[i].data); printf("%05d\n", v1[i * 2 + j].address); } //把剩下的長的輸出了 for (int i = v2.size()*2;i < v1.size(); i++) { printf("%05d %d %d\n", v1[i].address, v1[i].data, v1[i].next); } return 0; } /* 00100 01000 7 02233 2 34891 00100 6 00001 34891 3 10086 01000 1 02233 00033 5 -1 10086 4 00033 00001 7 -1 01000 1 02233 02233 2 00001 00001 7 34891 34891 3 10086 10086 4 00100 00100 6 00033 00033 5 -1 */