#include <iostream>
#define NULL 0
using namespace std;
struct Node
{
char data;
Node* next;
};
Node* create()
{
Node* head = NULL;
Node* rear = head;
Node* p; // The pointer points to new created node.
char tmp;
do
{
cout << "Please input integer or char '#':";
cin >> tmp;
if(tmp != '#')
{
p = new Node;
p->data = tmp;
p->next = NULL;
if(head == NULL)
{
head = p;
}
else
{
rear->next = p;
}
rear = p;
}
}
while(tmp != '#');
return head;
}
void print(Node* head)
{
Node* p = head;
if(head != NULL)
{
do
{
cout << p->data << ' ';
p = p->next;
}
while(p != NULL);
}
cout << endl;
}
Node* reverse(Node*& head) // Use & here since the function body changed the head pointer.
{
if(head == NULL)
{
return NULL;
}
Node*pre, *cur, *ne;
pre = head;
cur = head->next;
while(cur)
{
ne = cur->next; // Store next pointer.
cur->next = pre; // Reverse the current code pointer.
pre = cur;
cur = ne;
}
head->next = NULL;
head = pre;
return head;
}
Node* merge(Node* l1, Node* l2)
{
Node* l2Reverse = reverse(l2);
Node* p = new Node;
p->next = NULL;
Node* q = p;
while(l1 && l2Reverse)
{
if(l1->data < l2Reverse->data)
{
p->next = l1;
l1 = l1->next;
}
else
{
p->next = l2Reverse;
l2Reverse = l2Reverse->next;
}
p = p->next;
}
if(l1)
{
p->next = l1;
}
else if(l2Reverse)
{
p->next = l2Reverse;
}
return q->next;
}
void main()
{
Node* list1 = create();
cout << "The first list is:";
print(list1);
Node* list2 = create();
cout << "The second list is:";
print(list2);
cout << "The merged list is:";
Node* list = merge(list1, list2);
print(list);
}
// Output:
/*
Please input integer or char '#':1
Please input integer or char '#':2
Please input integer or char '#':3
Please input integer or char '#':4
Please input integer or char '#':7
Please input integer or char '#':9
Please input integer or char '#':#
The first list is:1 2 3 4 7 9
Please input integer or char '#':8
Please input integer or char '#':6
Please input integer or char '#':5
Please input integer or char '#':4
Please input integer or char '#':2
Please input integer or char '#':1
Please input integer or char '#':#
The second list is:8 6 5 4 2 1
The merged list is:1 1 2 2 3 4 4 5 6 7 8 9
*/
分享到:
相关推荐
严蔚敏-数据结构--链表实现c++实现 还不错哦!``
c代码-将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
数据结构_两个链表的合并,一元多项式相加
数据结构---线性表之双链表,创建、插入、删除,完整的C代码
用链表将两个数组升序后合并到另外一个数组,可以稍微改一下实现其他功能。。。
一、基础数据结构-1.链表-2.静态链表
数据结构-基本算法-静态链表(学生时代源码,调试可运行)
实现两个链表的合并(数据结构课程设计c语言版)
数据结构-链表 链表:是用一组地址任意的存储单元存放线性 表的各个数据元素,通过保存直接后继的存储 位置来表示元素之间的逻辑关系; 结点是链表的基本存储单位,每个结点在链表 中使用一块连续的存储空间,而相邻结点...
算法-数据结构之链表合并算法.rar
已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列
数据结构--双链表的操作---带头节点
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
实现双向链表的定义,冒泡排序,插入,删除,输出,反向。
从键盘输入两个链表,通过程序对他们排序,之后按递增顺序合并链表
使用单链表进行多元多项式的运算 两个多元多项式之间的操作 仅供参考
哈希表--链表 哈希表--链表 哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表哈希表--链表 哈希表--链表
数据结构(C语言版)---静态链表。这是博客配套代码。如果代码中有什么错误欢迎大家指出·············
(1)建立两个链表A和B 链表元素个数分别为m和n个 (2)假设元素分别为 x1 x2 …xm 和 y1 y2 …yn 把它们合并成一个线性表C 使得: 当m> n时 C x1 y1 x2 y2 …xn yn … xm 当n>m时 C y1 x1 y2 x2 …ym xm ...