将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
2017-05-10 09:36
459 查看
两种方法
新建链表,依次分离原链表结点插入到新链表上依然使用其中一个原链表,将另一个链表中的结点依次插入
这里使用第一种方法
代码如下
#include<iostream> #include<vector> #include<algorithm> #include<cstdio> #include<cstdlib> #include<ctime> using namespace std; typedef struct Node_ { int data; struct Node_ * next; }Node, * List; void Union( List &A, List &B, List &C ); void Print( List A ); int main( ) { vector<int> V1, V2; srand( (unsigned)time( 0 ) ); for( int i = 0; i < 50; i++ ) { V1.push_back( rand( ) % 50 + 1 ); V2.push_back( rand( ) % 50 + 1 ); } sort( V1.begin(), V1.end() ); sort( V2.begin(), V2.end() ); /* creat two lists */ List L1 = new Node; List L2 = new Node; List R1, R2; R1 = L1; R2 = L2; L1->next = nullptr; L2->next = nullptr; for( int i = 0; i < 50; i++ ) { List S1 = new Node; List S2 = new Node; S1->data = V1[i]; R1->next = S1; R1 = S1; S2->data = V2[i]; R2->next = S2; R2 = S2; } R1->next = R2->next = nullptr; /* delete the header */ List Temp; Temp = L1; L1 = L1->next; delete Temp; Temp = L2; L2 = L2->next; delete Temp; /* 合并为非增有序链表 */ List L3 = nullptr; Union( L1, L2, L3 ); Print( L3 ); getchar( ); return 0; } /*这里A,B也用引用是因为要避免原来的两个链表指针变成野指针*/ void Union( List &A, List &B, List &C ) { C = new Node; C->next = nullptr; while( A != nullptr && B != nullptr ) { List S; if( A->data < B->data ) { S = A; A = A->next; } else { S = B; B = B->next; } S->next = C->next; C->next = S; } if( A == nullptr ) A = B; List S; while( A != nullptr ) { S = A; A = A->next; S->next = C->next; C->next = S; } List Temp = C; C = C->next; delete Temp; } void Print( List A ) { while( A != nullptr ) { cout << A->data << "\t"; A = A->next; } }
相关文章推荐
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 将两个递增的链表合并成一个递减的链表(相同的元素只留下一个),并要求利用原表结点
- 要完整准确的 均以单链表作存储结构 试编写算法将A表和B表归并成一个按元素值递减有序的线性表C 【数据结构】假设有两个按元素值递增有序的线性表A和B 并要求利用原表的空间存放C。谁会么
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 将两个非递减的有序链表合并为一个非递增的有序链表
- 将两个非递减的有序链表合并为一个非递增的有序链表
- 已知两个链表 la和 lb,其元素值递增排序。编程将la和lb合并成一个递减有序(相同值元素只保留一个)的链表lc。(北方名校经典试题) 本题选做
- 将一个递增和递减的有序链表,用原空间合并成递增有序的链表-O(n)复杂度
- 将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 数据结构之将两个递增的有序链表合并为一个递增的有序链表
- 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合,现要求另辟空间构成一个顺序链表C
- 将两个递增的有序链表合并,不分配额外的空间
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
- 输入两个数列,分别以某数为结束标志,分别生成递增有序单链表;再将这两个表合并为一个递增有序单链表,输出表中各结点的值