上回說到建立鏈表的三種形式,分別是頭插法,尾插法,和尾插法MAX😂
👇下面講一下循環單鏈表👇
循環單鏈表,字面意思,就是單鏈表循環了起來,尾節點在輸入結束后不會指向NULL,而是指向了頭節點head
醬紫,鏈表就循環了起來
下面是代碼實現
#include <stdio.h>
#include <stdlib.h>
typedef char datatype;
typedef struct node
{
datatype data;
struct node *next;
int length;
}linkList;
linkList *CREAT(linkList *L)
{
L->length = 0;
linkList *head,*r,*s;
head = (linkList *)malloc(sizeof(linkList));
r = head;
char ch;
ch = getchar();
while(ch!='$')
{
s = (linkList *)malloc(sizeof(linkList));
L->length++;
s->data = ch;
r->next = s;
r = s;
s->next = head;
// char a = getchar();
// 如果使用上面這一句,在輸入data的時候可以在兩個字符間輸入空格
ch = getchar();
};
return r;
}
void PUT(linkList *L,linkList *r)
{
int i = 0;
linkList *pt;
pt = r;
pt = pt->next->next;
while(i<L->length)
//如果你想測試一下自己寫的代碼會不會循環起來,可以給length+2以上,看看會不會輸出
//因為在CREAT()的時候,我是用的是尾插法MAX😂,就是在整個鏈表的前面加上一個空的節點,所以輸出不會顯示這個節點的內容
{
printf("%c ",pt->data);
pt = pt->next;
i++;
};
printf("\n");
}
int main(void)
{
linkList L;
PUT(&L,CREAT(&L));
return 0;
}
//這個代碼的算法實現都是比較簡單易懂的,如果不是很清楚鏈表是怎樣構建的話,可以康一康我的上一篇blog
//希望能對初學數據結構的同學們有一點幫助