/**
* 用链表实现 王道P40 T18
*
* ①算法思想:
* 找到 h1 的最后一个节点连接到 h2 的第一个节点,
* 找到 h2 的最后一个节点连接到 h1 的第一个节点。
*
* ②数据结构:
* typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
*
* ③算法设计
*/
#include <stdio.h>
#include <iostream>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList ConnectH1H2(LinkList &h1,LinkList &h2){
LinkList p1 = h1 -> next,pre1 = h1;
while(p1 != h1){
p1 = p1 -> next;
pre1 = pre1 -> next;
}
pre1 -> next = h2;
LinkList p2 = h2 -> next,pre2 = h2;
while(p2 != h2){
p2 = p2 -> next;
pre2 = pre2 -> next;
}
pre2 -> next = h1;
return h1;
}
//以下为测试程序
LinkList CreatCLinkListRNH(){
LinkList L = NULL;//这边刚开始需要置空,因为插入第一个节点时需要让头指针L指向第一个节点,
//而判断是否是第一个节点的条件就是L是否指向空。
LinkList p = L,q;
int data;
while(1){
scanf("%d",&data);
if(data == 99999)
break;
q = (LinkList)malloc(sizeof(LNode));
q -> data = data;
if(L == NULL){
L = q;
p = q;
L -> next = L;
}else{
p -> next = q;
p = q;
p -> next = L;
}
}
return L;
}
//循环单链表的遍历(有头节点、无头结点)
//带头结点的传入 L -> next ,不带头结点的传入 L
LinkList Order(LinkList L){
while(L -> next != L){
printf("%d ",L -> data);
L = L -> next;
}
printf("\n");
}
int main(){
LinkList h1 = CreatCLinkListRNH();
LinkList h2 = CreatCLinkListRNH();
ConnectH1H2(h1,h2);
Order(h1);
return 0;
}
11-26
255
04-29
1486
07-15
172
07-12
108
09-24
1160