代码示例
/*
function:循环单链表的合并
created by : xilong
date: 2017.2.5
*/
#include "iostream"
using namespace std;
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef double ElemType;
typedef int Status;
typedef struct Node
{
ElemType data;
struct Node* next;
}Node;
typedef struct Node* CLinkList;
/*
功能:初始化
*/
CLinkList CLinkList_Init()
{
CLinkList head;
head = (CLinkList)malloc(sizeof(CLinkList));
head->next = head; // 循环空链表
return head;
}
/*
功能:尾插法创建循环单链表
*/
void CLinkList_CreateFormTail(CLinkList *head)
{
CLinkList p, s;
p = *head;
double data;
int flag = 1;
while (flag)
{
cin >> data;
if (data != -99999)
{
s = (CLinkList)malloc(sizeof(CLinkList));
s->data = data;
p->next = s;
s->next = *head;
p = s;
}
else
{
flag = 0;
p->next = *head;
}
}
}
/*
功能:合并两个循环链表
*/
CLinkList CLinkList_merge(CLinkList *LA, CLinkList *LB)
{
CLinkList p1, p2;
p1 = *LA;
p2 = *LB;
if (p1->next == p1) // 如果第一个链表为空,就直接返回第二个链表的头结点
{
return *LB;
}
if (p2->next == p2) // 如果第二个链表为空,返回第一个链表头结点
{
return *LA;
}
while (p1->next != (*LA)) // 找到表LA的表尾,用p1指向它
{
p1 = p1->next;
}
while (p2->next != (*LB)) // 找到表LB的表尾,用p2指向它
{
p2 = p2->next;
}
p2->next = *LA; // 修改表LB的尾指针,使之指向表LA的头结点
p1->next = (*LB)->next; // 修改表LA的尾指针,使之指向表LB中的第一个结点
free(*LB);
return *LA; // 返回表LA的头结点
}
/*
功能:打印链表数据
*/
Status CLinkList_Print(CLinkList *head)
{
CLinkList p;
p = (*head)->next;
if ((*head)->next == (*head))
{
cout << "空链表!" << endl;
return ERROR;
}
while (p != (*head))
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
return OK;
}
void main()
{
CLinkList LA, LB, LAB;
cout << "LA链表的初始化以及创建:(输入-99999结束)" << endl;
LA = CLinkList_Init();
CLinkList_CreateFormTail(&LA);
cout << "打印LA链表数据:";
CLinkList_Print(&LA);
cout << "LB链表的初始化以及创建:(输入-99999结束)" << endl;
LB = CLinkList_Init();
CLinkList_CreateFormTail(&LB);
cout << "打印LB链表数据:";
CLinkList_Print(&LB);
LAB = CLinkList_merge(&LA, &LB);
cout << "打印合并后的链表:";
CLinkList_Print(&LAB);
cout << "插入数据,输入插入位置:";
system("pause");
}
程序截图
说明
有关循环单链表的删除,查找等操作,在前几篇文章都有完整的代码示例和程序截图。
单链表的基本操作:http://blog.youkuaiyun.com/xilong_666/article/details/54865927