循環チェーンテーブルの結合


本のテーマ、リーダーシップチェーン&リーダーシップチェーンテーブル
先頭に立たないチェーンテーブルが空の場合、判断:head=NULL;
先頭チェーンテーブルが空である場合、head->next=NULLと判断する.
ただし、チェーンテーブルの挿入、削除は異なります.先頭に立たないチェーンテーブルはヘッダノードに対して個別に処理する必要がありますが、先頭に立たないチェーンテーブルには必要ありません.
 1 #include <iostream>
 2 using namespace std;
 3 typedef struct node 
 4 {
 5     int date;
 6     struct node* next;
 7 }*linklist,listnode;
 8 linklist initlist(linklist head)
 9 {
10     head=new listnode;
11     head->next=NULL;
12     return head;
13 }
14 void input(linklist head,int n)
15 {
16     linklist tail=NULL,temp=NULL;
17     while(n--)
18     {
19         if(tail==NULL)
20         {
21             cin>>head->date;
22             tail=head;
23         }
24         else
25         {
26             temp=new listnode;
27             cin>>temp->date;
28             tail->next=temp;
29             tail=temp;
30             tail->next=NULL; 
31         }
32     }
33     tail->next=head;
34 }
35 linklist bin(linklist head1,linklist head2)
36 {
37     linklist p=head1,tail;
38     while(p->next!=head1)
39         p=p->next;
40     tail=p;
41     tail->next=head2;
42     p=head2;
43     while(p->next!=head2)
44         p=p->next;
45     p->next=head1;
46     return p;
47 }
48 void outputlist(linklist head)
49 {
50     linklist p=head;
51     while(p!=NULL)
52     {
53         cout<<p->date<<' ';
54         p=p->next;
55     }
56 }
57 int main()
58 {
59     linklist head1,head2,tail=NULL,p;
60     head1=initlist(head1);
61     head2=initlist(head2);
62     input(head1,5);
63     input(head2,5);
64     tail=bin(head1,head2);
65     p=head1;
66     while(p!=tail)
67     {
68         cout<<p->date<<' ';
69         p=p->next;
70     }
71     cout<<tail->date;
72     return 0;
73 }