1 #include<stdio.h> 2 #include<stdlib.h> 3 /* 用尾指针表示的单循环链表,相比于使用头指针表示的单循环链表: 4 * 后者在寻找链表的第一个节点的时候,时间复杂度是O(1),在寻找链 5 * 表的最后一个元素的时候,时间复杂度是O(n)。 6 * 前者在寻找链表的第一个节点的时候,事件复杂度是O(1)(tail->next 7 * ->next->data即为第一个元素的值),在寻找最后一个节点的时候,时间 8 * 复杂度为O(1). 9 * */ 10 typedef struct Node{ 11 int data; 12 struct Node* next; 13 }Node; 14 typedef struct Node* LinkList; 15 16 void Initial_SCL_tail(LinkList* L){ 17 *L = (LinkList)malloc(sizeof(struct Node)); 18 if(!(*L)){ 19 printf("Error:Initial:malloc!\n"); 20 exit(1); 21 } 22 (*L)->next = *L; 23 } 24 void Create_SCLtail(LinkList* L,int number){ 25 int i; 26 LinkList new; 27 LinkList tail = *L; 28 printf("---Create LinkList---\n"); 29 for(i = 1;i <= number; i++){ 30 new = (LinkList)malloc(sizeof(struct Node)); 31 if(!new){ 32 printf("Error:Create_SCLtail:malloc:%d\n",i); 33 exit(1); 34 } 35 printf("please enter %d element: ",i); 36 scanf("%d",&(new->data)); 37 tail->next = new; 38 new->next = (*L); 39 tail = new; 40 } 41 *L = new; 42 } 43 void connect(LinkList LA,LinkList *LB){ 44 /* 将LB链接到LA的后面 45 * */ 46 LinkList temp,temp1; 47 temp = LA->next; 48 temp1 = (*LB)->next; 49 LA->next = (*LB)->next->next; 50 (*LB)->next = temp; 51 free(temp1); 52 } 53 void Display_SCLtail(LinkList L){ 54 LinkList temp; 55 printf("Element of List is:"); 56 temp = L->next->next;//temp now point to first node; 57 while(temp != L->next){ 58 printf("%d ",temp->data); 59 temp = temp->next; 60 } 61 printf("\n"); 62 } 63 int main(){ 64 LinkList L1,L2; 65 Create_SCLtail(&L1,5); 66 Create_SCLtail(&L2,8); 67 Display_SCLtail(L1); 68 Display_SCLtail(L2); 69 connect(L1,&L2); 70 Display_SCLtail(L2); 71 return 0; 72 }
原文:http://www.cnblogs.com/robin-xu/p/5186997.html