#include<stdio.h>
#include<stdlib.h>
/*
*实现两个双向链表之间的连接
*/
typedef int Element;//指定数据类型
typedef struct list
{
Element data;//数据域
struct list *next;//指向下一个节点的指针
struct list *prior;//指向前一个节点的指针
}ListNode;//创建双向链表的结构体
ListNode *create_list();//创建链表
void show (ListNode*head);//进行链表的遍历
ListNode *link_list(ListNode*head1,ListNode*head2);//连接两个链表
void main()
{
//创建两个头结点
ListNode*head1;
ListNode*head2;
ListNode*head;//两个两个链表之后的节点
//创建两个链表
head1=create_list();
head2=create_list(head2);
head=link_list(head1,head2);
//进行链表的遍历
show(head);
}
ListNode*create_list()
{
ListNode*head;
ListNode*p;
ListNode*tail;
int n;//数据域变量
head=(ListNode*)malloc(sizeof(ListNode));
if(head==NULL)
{
return NULL;
}
else
{
tail=head;
}
printf("请输入数据(键盘键入ctrl+z结束循环):\n");
while(scanf("%d",&n)!=EOF)
{
p=(ListNode*)malloc(sizeof(ListNode));
if(p==NULL)
{
return NULL;
}
p->data=n;
p->prior=tail;
tail->next=p;
tail=p;
p->next=head;
}
return head;
}
void show(ListNode*head)
{
if(head==NULL)
{
printf("链表遍历失败!");
return;
}
ListNode*p=head->next;
printf("HEAD->\n");
while(p!=head)
{
printf("%d\t",p->data);
p=p->next;
}
printf("\n->END");
}
ListNode*link_list(ListNode*head1,ListNode*head2)
{
ListNode*endNode1;//指向双向链表1的最后一个节点
ListNode*endNode2;//指向双向链表的最后一个节点
ListNode*p;
p=head1;
while(p->next!=head1)
{
p=p->next;
}
endNode1=p;
p=head2;
while(p->next!=head2)
{
p=p->next;
}
endNode2=p;
endNode1->next=head2->next;
head2->next->prior=endNode1;
endNode2->next=head1;
return head1;
}