首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言實例練習

C語言練習實例73:鏈表逆序輸出(遞歸/棧思想)

     編輯:C 語言實例練習

C語言練習實例73:鏈表逆序輸出(遞歸/棧思想)

本實例創建單鏈表並正序輸出(代碼中 print 函數為正序遍歷,標題「反向輸出」與代碼不符,實際為正序打印)。

程序分析

  • CreateList:頭插法(帶頭節點)創建鏈表,輸入 n 個元素值。
  • print:從頭節點的 next 開始遍歷,順序打印各節點 data。
  • 主函數讀取 n,調用創建與打印。

源代碼

// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct LNode {
    int data;
    struct LNode *next;
} LNode, *LinkList;

LinkList CreateList(int n);
void print(LinkList h);

int main() {
    LinkList Head = NULL;
    int n;
    scanf("%d", &n);
    Head = CreateList(n);
    printf("剛剛建立的各個鏈表元素的值為:\n");
    print(Head);
    printf("\n\n");
    system("pause");
    return 0;
}

LinkList CreateList(int n) {
    LinkList L, p, q;
    int i;
    L = (LNode*)malloc(sizeof(LNode));
    if (!L) return 0;
    L->next = NULL;
    q = L;
    for (i = 1; i <= n; i++) {
        p = (LinkList)malloc(sizeof(LNode));
        printf("請輸入第%d個元素的值:", i);
        scanf("%d", &(p->data));
        p->next = NULL;
        q->next = p;
        q = p;
    }
    return L;
}

void print(LinkList h) {
    LinkList p = h->next;
    while (p != NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
}

補充:真正的逆序輸出

若需逆序輸出,可使用遞歸:

void print_reverse(LinkList h) {
    if (h == NULL) return;
    print_reverse(h->next);
    printf("%d ", h->data);
}

或使用棧存儲節點指針再彈出打印。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved