【发布时间】:2017-07-28 21:12:50
【问题描述】:
我有以下程序,下面的输出是用 C 语言编写的。
我希望在为我的尾巴添加一个值之后为 40 和我的头为 30,但事实并非如此。
我是在结构的内存分配方面犯了错误,还是比这不那么明显?
我在 Mac OSX 上使用 GCC 编译器。
#include <stdio.h>
struct LinkedListNode {
int data;
struct LinkedListNode *next;
};
struct LinkedList {
int size;
struct LinkedListNode *head;
struct LinkedListNode *tail;
};
struct LinkedList create_linked_list(){
struct LinkedList linkedList;
linkedList.size = 0;
linkedList.head = NULL;
linkedList.tail = NULL;
return linkedList;
}
struct LinkedList prepend(struct LinkedList *linkedList, int data){
struct LinkedListNode linkedListNode;
linkedListNode.data = data;
linkedListNode.next = linkedList->head;
linkedList->head = &linkedListNode;
if(linkedList->tail == NULL){
printf("Setting tail to: %d\n", data);
linkedList->tail = &linkedListNode;
}else{
printf("The tail is: %d\n", linkedList->tail->data);
}
linkedList->size = linkedList->size + 1;
return *linkedList;
}
int main(){
struct LinkedList linkedList;
linkedList = create_linked_list();
linkedList = prepend(&linkedList, 40);
struct LinkedListNode head = *linkedList.head;
struct LinkedListNode tail = *linkedList.tail;
printf("%d\n", head.data);
printf("%d\n", tail.data);
printf("%d\n", linkedList.size);
linkedList = prepend(&linkedList, 30);
head = *linkedList.head;
tail = *linkedList.tail;
printf("%d\n", head.data);
printf("%d\n", tail.data);
printf("%d\n", linkedList.size);
}
输出:
Setting tail to: 40
40
40
1
The tail is: 30
30
30
2
【问题讨论】:
-
请不要更新您的问题以包含答案的结果。这就是答案的用途。通过接受答案,您已经展示了如何解决您的问题
标签: c struct linked-list