#include<stdio.h>
#include<stdlib.h>
/* 用尾指针表示的单循环链表,相比于使用头指针表示的单循环链表:
* 后者在寻找链表的第一个节点的时候,时间复杂度是O(1),在寻找链
* 表的最后一个元素的时候,时间复杂度是O(n)。
* 前者在寻找链表的第一个节点的时候,事件复杂度是O(1)(tail->next
* ->next->data即为第一个元素的值),在寻找最后一个节点的时候,时间
* 复杂度为O(1).
* */
typedef struct Node{
int data;
struct Node* next;
}Node;
typedef struct Node* LinkList;
void Initial_SCL_tail(LinkList* L){
*L = (LinkList)malloc(sizeof(struct Node));
if(!(*L)){
printf("Error:Initial:malloc!\n");
exit(1);
}
(*L)->next = *L;
}
void Create_SCLtail(LinkList* L,int number){
int i;
LinkList new;
LinkList tail = *L;
printf("---Create LinkList---\n");
for(i = 1;i <= number; i++){
new = (LinkList)malloc(sizeof(struct Node));
if(!new){
printf("Error:Create_SCLtail:malloc:%d\n",i);
exit(1);
}
printf("please enter %d element: ",i);
scanf("%d",&(new->data));
tail->next = new;
new->next = (*L);
tail = new;
}
*L = new;
}
void connect(LinkList LA,LinkList *LB){
/* 将LB链接到LA的后面
* */
LinkList temp,temp1;
temp = LA->next;
temp1 = (*LB)->next;
LA->next = (*LB)->next->next;
(*LB)->next = temp;
free(temp1);
}
void Display_SCLtail(LinkList L){
LinkList temp;
printf("Element of List is:");
temp = L->next->next;//temp now point to first node;
while(temp != L->next){
printf("%d ",temp->data);
temp = temp->next;
}
printf("\n");
}
int main(){
LinkList L1,L2;
Create_SCLtail(&L1,5);
Create_SCLtail(&L2,8);
Display_SCLtail(L1);
Display_SCLtail(L2);
connect(L1,&L2);
Display_SCLtail(L2);
return 0;
}
单循环链表(使用尾指针表示)
最新推荐文章于 2024-08-10 20:22:56 发布