嘿,伙计们,我想打印一个带有输出的双链接列表:[23 34 56 52][52 56 34 23]但我的程序在上半场缺少52个,在下半场缺少23个,即我的输出为:[23 34 56][52 56 34]有人请纠正我的代码。谢谢
#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;
struct Node* prev;
struct Node* next;
};
void linkedListTraversal(struct Node* head){
struct Node* ptr = head;
printf("[ ");
while(ptr->next != NULL){
printf("%d ",ptr->data);
ptr = ptr->next;
}
printf("]");
printf("n");
printf("[ ");
while(ptr->prev != NULL){
printf("%d ",ptr->data);
ptr = ptr->prev;
}
printf("]");
}
int main(){
struct Node* head;
struct Node* second;
struct Node* third;
struct Node* fourth;
head = (struct Node*) malloc(sizeof(struct Node));
second= (struct Node*) malloc(sizeof(struct Node));
third = (struct Node*) malloc(sizeof(struct Node));
fourth = (struct Node*) malloc(sizeof(struct Node));
head->data = 23;
head->prev = NULL;
head->next = second;
second->data = 34;
second->prev = head;
second->next = third;
third->data = 56;
third->prev = second;
third->next = fourth;
fourth->data = 52;
fourth->prev = third;
fourth->next = NULL;
linkedListTraversal(head);
return 0;
}
正如一些评论所说,这很简单,你可能可以使用调试器来解决它,为了你正在进行的编码教育,我建议你研究一下(当我刚开始的时候,他们大大加强了我的游戏!(。
然而,为了回答你的问题,我认为你需要专注于while循环背后的逻辑。
while(ptr->next != NULL){
printf("%d ",ptr->data);
ptr = ptr->next;
}
这是在说";当我的ptr
的next
不为空时,打印它的data
";。这个问题是您的最后一个(或第一个(节点没有next
(或prev
(,因此不符合打印其data
的条件。
相反,你想说";直到我的节点为空打印出它的CCD_ 7〃;,看起来像
while(ptr != NULL){
printf("%d ",ptr->data);
ptr = ptr->next;
}
问题是向前打印而不偏离末尾,然后转换到反向。以下是具有一些增强功能的版本。
使用typedef
可以节省大量的打字(和阅读!(。使用calloc()
将结构初始化为NULL(包括ptr(。始终测试函数的返回值;你可能会耗尽内存。在main((中布置作业,以明确你在做什么。
typedef struct Node {
int data;
struct Node* prev;
struct Node* next;
} Node_t;
void linkedListTraversal( Node_t *head ) {
printf("[ ");
Node_t *pLast = head;
for( Node_t *pn = head; pn; pLast = pn, pn = pn->next )
printf( "%d ", pn->data );
printf("]n[ ");
for( pn = pLast; pn; pn = pn->prev )
printf("%d ", pn->data );
printf("]");
}
int main() {
Node_t *p1 = (Node_t*)calloc( 1, sizeof *p1 ); // use calloc()
Node_t *p2 = (Node_t*)calloc( 1, sizeof *p2 );
Node_t *p3 = (Node_t*)calloc( 1, sizeof *p3 );
Node_t *p4 = (Node_t*)calloc( 1, sizeof *p4 );
if( p1 == NULL || p2 == NULL || p3 == NULL || p4 == NULL ) {
fprintf( stderr, "Calloc failuren" );
return -1;
}
p1->data = 23; p1->next = p2;
p2->prev = p1; p2->data = 34; p2->next = p3;
p3->prev = p2; p3->data = 56; p3->next = p4;
p4->prev = p3; p4->data = 52;
linkedListTraversal( p1 );
return 0;
}
输出:
[ 23 34 56 52 ]
[ 52 56 34 23 ]