注意:以下操作涉及的链表均是用尾指针表示的,不是头指针 !
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MaxSize 100
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;
//初始化以尾指针表示的循环单链表
int ListInit(LinkList &L){
L=new Lnode;
if(!L) exit(ERROR);
L->next=L;
return OK;
}
//头插法建立以尾指针表示的循环单链表
void HCreatInsert(LinkList &L,int n){
Lnode *t=L;
for(int i=n;i>0;i--){
Lnode *p=new Lnode;
if(i==n) t=p;
cout<<"请输入要插入的值:";
cin>>p->data;
p->next=L->next;
L->next=p;
}
t->next=L;
L=t;
}
//尾插法建立以尾指针表示的循环单链表
void TCreatInsert(LinkList &L,int n){
Lnode *t=L;
for(int i=n;i>0;i--){
Lnode *p=new Lnode;
p->next=NULL;
cout<<"请输入要插入的值:";
cin>>p->data;
t->next=p;
t=p;
}
t->next=L;
L=t;
}
//合并两个以尾指针表示的循环单链表
LinkList ListConnect(LinkList La,LinkList Lb){
Lnode *p=La->next;
La->next=Lb->next->next;
delete Lb->next;
Lb->next=p;
return Lb;
}
//从头到尾正向遍历链表并输出值
void ListTraverse(LinkList L){
Lnode *p=L->next;
if(p==L) cout<<"此链表为空";
else{
while(!(p==L)){
p=p->next;
cout<<p->data<<endl;
}
}
}
int main()
{
LinkList La=new Lnode;
LinkList Lb=new Lnode;
ListInit(La);
ListInit(Lb);
TCreatInsert(La,3);
TCreatInsert(Lb,3);
LinkList Lc=ListConnect(La,Lb);
ListTraverse(Lc);
}