今天一高中同学发短信求助,帮忙写一段程序,实现2个单链表的合并,并按升序排列。
哎,当初没有好好学习,数据结构什么的很差劲,只有硬着头皮,看书,查资料,终于算是用
C++编写出来了,虽然检查错误耗费了一个下午。
#include <iostream>
using namespace std;
#define NUM 8
struct LNode
{
int data;
struct LNode *next;
};
typedef struct LNode * LinkList;
/**
将数组插入链表
*/
void create(LinkList &list, int a[])
{
struct LNode *p;
int i;
list->next = NULL;
for (i = NUM-1; i >= 0; --i)
{
p = new LNode;
p->data = a[i];
p->next = list->next;
list->next = p;
}
}
/**
显示链表节点值
*/
void show(LinkList list)
{
struct LNode *p;
p = list->next;
while (p)
{
cout << p->data << ' ';
p = p->next;
}
}
/**
合并链表
*/
LinkList Merge(LinkList la, LinkList lb, LinkList &lc)
{
LNode *p;
// 确定最大值在la上, 还是lb上
if(la->data > lb->data)
{
lc = p = la;
la = la->next;
}
else
{
lc = p = lb;
lb = lb->next;
}
while(la && lb)
{
if(la->data <= lb->data)
{
p->next = la;
la = la->next;
}
else
{
p->next = lb;
lb = lb->next;
}
p = p->next;
}
// 剩余部分链表的挂接
p->next = (la ? la:lb);
return lc;
}
void main()
{
LinkList s;
LinkList u;
LinkList A;
int ss[NUM]={1,3,5,7,9,11,13,17};
int uu[NUM]={2,8,14,19,21,25,26,33};
s = new LNode;
u = new LNode;
A = new LNode;
create(s, ss);
create(u, uu);
cout<<"链表s显示:"<<endl;
show(s);
cout<<endl;
cout<<"链表u显示:"<<endl;
show(u);
cout<<endl;
Merge(s,u,A);
cout<<"合并之后链表A显示:"<<endl;
show(A);
cout<<endl;
}
程序 = 数据结构 + 算法
基础不扎实很难向上发展,否则只能成为代码民工;
给自己打个气,一步一步来,向着自己的梦想慢慢前进。
浪费的青春要自己争回来!