[英]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.