簡體   English   中英

在 C 中插入和打印鏈表

[英]Inserting & Printing Linked List in C

我正在使用這段代碼測試我的鏈表函數,但我無法正確打印它。 我希望程序打印出HELLO但它打印出LO 這是我第一次使用鏈接列表,因此感謝您的幫助。

我確實嘗試在每次插入字母后print function 以查看insert功能是否正常工作。 它會打印出每個字母,但在插入所有字母並再次打印后,它只會打印出最后兩個字母。 所以我相信問題不在於insert功能,但我可能是錯的。

這是我的 header 文件:


#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

typedef char DATA_TYPE;


typedef struct node_t
{
    DATA_TYPE item;
    struct node_t* next;
} node;

typedef struct
{
    node* head;
    int len;
} linkedlist_t;

void init_list(linkedlist_t* plist);
void insert_first(linkedlist_t* plist, DATA_TYPE item);
void insert_middle(linkedlist_t* plist, int pos, DATA_TYPE item);
void insert_last(linkedlist_t* plist, DATA_TYPE item);
void print(linkedlist_t* plist);    

功能:

#include "linkedlist.h"

void init_list(linkedlist_t* plist)
{

    plist->head = (node *)malloc(sizeof(node));
    plist->head->next = NULL;
    plist->len = 0;
}


void insert_first(linkedlist_t* plist, DATA_TYPE item)
{
    node* cur, *newNode;

    newNode = (node *)malloc(sizeof(node));
    newNode->item = item;
    newNode->next = NULL;

    cur = plist->head;

    newNode->next = cur->next;
    cur->next = newNode;
    plist->len++;
}



void insert_middle(linkedlist_t* plist, int pos, DATA_TYPE item)
{

    node* cur, *newNode;
    if(pos < 0 || pos > plist->len){
        exit(1);
    }

    newNode = (node *)malloc(sizeof(node));
    newNode->item = item;
    newNode->next = NULL;

    cur = plist->head;
    for(int i = 0; i < pos; i++){
        cur = cur->next;
    }

    newNode->next = cur->next;
    cur->next = newNode;
    plist->len++;
}

void insert_last(linkedlist_t* plist, DATA_TYPE item)
{

    node* cur, *newNode;

    newNode = (node *)malloc(sizeof(node));
    newNode->item = item;
    newNode->next = NULL;

    cur = plist->head;
    while(cur->next != NULL){
        cur = cur->next;
    }

    newNode->next = cur->next;
    cur->next = newNode;
    plist->len++;

}


void print(linkedlist_t* plist)
{
    node* cur;
    while(cur != NULL){
        printf("%c", cur->item);
        cur = cur->next;
    }
    printf("\n");
}

主要function:

#include "linkedlist.h"
#include <string.h>

int main(void) {


    linkedlist_t list;

    init_list(&list);

    insert_first(&list, 'H');
    insert_middle(&list, 1, 'E');
    insert_middle(&list, 2, 'L');
    insert_middle(&list, 3, 'L');
    insert_last(&list, 'O');

    print(&list);

    return 0;
}

您的print function 不使用參數plist

你很可能想要這樣的東西:

void print(linkedlist_t* plist)
{
    node* cur = plist->head;
    while(cur != NULL){
        printf("%c", cur->item);
        cur = cur->next;
    }
    printf("\n");
}

此外init_list正在將具有未初始化字符的節點添加到列表的開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM