c-我想打印一个从左到右,然后从右到左的双链接列表,但我的程序每侧都缺少一个元素



嘿,伙计们,我想打印一个带有输出的双链接列表:[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;
}

这是在说";当我的ptrnext不为空时,打印它的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  ]

相关内容

最新更新