創建單鏈表有多種方式,我這裏介紹從尾部添加新節點的創建方式。
創建的過程:
1.定義節點的數據結構
c語言中鏈表節點是用結構體來實現,創建之前要明白數據域需要什麼類型的數據。例如:
//定義鏈表中的節點
typedef struct node{
int data; //鏈表中的數據
struct node * p_next;//指向下一節點的指針
}Node,*pNode;
2.動態創建節點
創建節點的過程中要用到三個指針:
p_head:指向頭節點的指針
p_tail:指向當前尾節點的指針
pNew:指向新增節點的指針
就像數組一樣,我們能通過數組名或數組的第一個元素的地址來找到該數組,鏈表是通過頭指針來找到的,所以創建的第一步要
定義一個頭指針,接着我們要讓p_tail指針指向頭結點(一開始頭節點就是尾節點),動態創建一個節點,並用pNew指針來指向,同時把新節點加到鏈表末尾(即p_tail的指向的下一節點爲pNew指向的節點),把新節點指向的節點賦爲空(此時新節點加上後就變爲最後一個節點了,所以它指向的下一節點爲空),設置尾節點爲新節點(即p_tail=pNew),再添加新節點是,重複上一步驟。
創建的代碼實現如下:
pNode CreateList(){
int i, len;
//開闢頭結點
pNode p_head = (pNode) malloc(sizeof(Node));
pNode p_tail = p_head;
p_tail->p_next = NULL;
printf("請輸入節點的個數:");
scanf("%d",&len);
for(i = 0;i < len; i++){
pNode pNew = (pNode) malloc(sizeof(Node));//開闢新節點
scanf("%d", &pNew->data);
p_tail->p_next = pNew;//將尾節點指向新節點
pNew->p_next = NULL;//新節點應該指向NULL
p_tail = pNew;//當前尾節點爲新節點
}
return p_head;
}
順序遍歷鏈表:
void TraverseList(pNode h){
pNode p = h->p_next;
while(p != NULL){
printf("%d\n",p->data);
p = p->p_next;
}
}
測試代碼:
int main()
{
pNode test = CreateList();
TraverseList(test);
return 0;
}
//輸入1 2 3
//輸出1 2 3