【发布时间】:2021-04-07 23:37:23
【问题描述】:
我正在使用这段代码的 sn-p 测试我的链表函数,但我无法正确打印它。我希望程序打印出HELLO,但它打印出LO。这是我第一次使用链表,因此感谢您的帮助。
我确实尝试在每次插入字母后放置 print 函数,以查看 insert 函数是否正常工作,它们是否正常工作。它会打印出每个字母,但在插入所有字母并再次打印后,它只会打印出最后两个字母。所以我认为问题不在于insert 函数,但我可能是错的。
这是我的头文件:
#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");
}
主要功能:
#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;
}
【问题讨论】:
-
无法正确打印。你能给出确切的行为吗? 我想我知道问题出在哪里。您能给我们提供这些信息吗?
-
@kaylum 我更新了问题,希望现在更完整一些。
标签: c linked-list