#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef char DataType;
typedef struct LinkList
{
DataType data;
struct LinkList *next;
}LinkList; //定義結點
void InsertDataByTail(LinkList *head) //尾插法
{
char x;
LinkList *node;
LinkList *remove;
while(NULL != head->next)
{
head = head->next;
}
remove = head;
printf("input the data (0 stop):\n");
x = getchar();
while(x!='0')
{
node = (LinkList *)malloc(sizeof(LinkList));
node->data = x;
node->next = remove->next;
remove->next = node;
remove = node;
x = getchar();
}
}
void ShowListInfor(LinkList *head)
{
head = head->next;
printf("輸出鏈表\n");
while(NULL != head)
{
putchar(head->data);
head = head->next;
}
}
void GetListLength(LinkList *head)
{
int count = 0;
while(head->next) {
head = head->next;
count++;
}
printf("the length is %d\n",count/2);
}
void main()
{
LinkList *head;
head = (LinkList *)malloc(sizeof(LinkList));
head->next = NULL;
InsertDataByTail(head);
ShowListInfor(head);
GetListLength(head);
}
依次輸入:a b c d e
得到的鏈表長度是正確長度的兩倍,讓我不得不在GetListLength函式中將count/2。
整體的是想創建頭結點,在利用尾插法建立鏈表,邊插入資料邊創建鏈表。
實在不明白為什么count為什么是兩倍。
uj5u.com熱心網友回復:
因為你這種寫法就是雙倍的a 是一個節點,然后回車是一個節點,b又是一個點,回車又是一個節點
x = getchar()第一次獲得到是字符,第二次獲得的是回車啊, 依次類推
uj5u.com熱心網友回復:
一夜驚醒夢中人,感謝感謝????????
uj5u.com熱心網友回復:
'\n'也是一個節點。所以長度翻倍了吧uj5u.com熱心網友回復:
用%d輸入數字應該不會出現這種情況了。getchar()比較特殊轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/111596.html
標籤:C語言
