創建單鏈表(創建頭結點的方式,頭插入法初始化賦值)


//鍵盤輸入若干個整數,按輸入數據逆序建立一個帶頭結點的單鏈表(頭插入創建單鏈表)
#include<stdio.h>
#include<stdlib.h>

typedef struct Link {
    int data;
    struct Link* next;
}link;


//頭插入的方式初始化鏈表
link* initLink(link* head_node) {
    head_node = (link*)malloc(sizeof(link)); //創建頭結點
    head_node->data = 0; //頭結點數據域初始化賦值為0
    head_node->next = NULL;

    link* ptail = head_node;

    //頭插入賦值
    printf("輸入若干個值逆序保存到鏈表中:\n");
    int num = 0;
    while (num != -1) { //輸入-1就結束
        scanf("%d", &num);
        link* new_node = (link*)malloc(sizeof(link)); //申請一個新節點
        new_node->data = num; //給新節點賦初值
        new_node->next = head_node; //新節點的指針域是最后一個結點
        head_node = new_node; //新節點成為最后一個結點(頭結點,頭結點在后面)
        ptail = new_node; //尾指針指向這個新節點,不斷往前移動
    }
    printf("尾指針指向的值是:%d\n", head_node->next->data);
    //return ptail; //將指向最后一個結點的尾指針返回
    return head_node;
}


//遍歷鏈表(逆序建立,順序遍歷)
void showLink(link* head_node) {
    link* tmp =head_node->next; //從頭結點的下一個結點,即第一個結點開始遍歷,避免輸出結束標志-1
    while (tmp != NULL) {
        //if (tmp->data == -1) {
        //    break; //順序遍歷,結束標志 -1不輸出不能這樣控制,否則一個都輸出不了
        //}
        printf("%d ", tmp->data);
        tmp = tmp->next;
    }
}

void main() {
    link* myHeadNode = NULL;
    myHeadNode = initLink(myHeadNode); //獲取經過初始化的頭結點
    printf("逆序建立的鏈表為:\n");
    showLink(myHeadNode);
}

0是頭結點中的值,可以不打印,遍歷時遍歷到 tmp->data ==0 ,退出遍歷即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM