我用C语言编写了双重链接列表的代码,它从头到尾的遍历很好,但从尾(end)到头的遍历陷入了无限循环,只打印最后一个节点的数据,我不知道出了什么问题。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *prev;
struct node *next;
};
typedef struct node list;
list *head, *current, *newn, *end;
int main() {
int x, y;
current = (list*)malloc(sizeof(list));
printf("enter data:");
scanf("%d", ¤t->data);
current->next = NULL;
current->prev = NULL;
head = current;
printf("do you want to enter more:");
scanf("%d", &x);
while (x == 1) {
current->next = (list*)malloc(sizeof(list));
printf("enter data:");
scanf("%d", ¤t->next->data);
current->next->prev = current->next;
current->next->next = NULL;
current = current->next;
end = current;
printf("do yo want to enter more:");
scanf("%d", &x);
}
newn = head;
while (newn != NULL) {
printf("%d:%d:%d->", newn->prev, newn->data, newn->next);
newn = newn->next;
}
while (end->prev != NULL) {
printf("%d", end->data);
end = end->prev;
}
}
将来自评论的答案放在一起,下面是固定的代码:
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *prev;
struct node *next;
};
typedef struct node list;
list *head, *current, *newn, *end;
void exitWithFail() {
printf("Error: exiting.\n");
exit(1);
}
int main()
{
int x,y,r;
current = (list*)malloc(sizeof(list));
printf("enter data:");
r = scanf("%d",¤t->data);
if (r != 1) exitWithFail();
current->next = NULL;
current->prev = NULL;
head = end = current;
printf("do you want to enter more:");
r = scanf("%d",&x);
if (r != 1) exitWithFail();
while(x == 1)
{
current->next = (list*)malloc(sizeof(list));
printf("enter data:");
r = scanf("%d",¤t->next->data);
if (r != 1) exitWithFail();
current->next->prev = current; // problem No.1
current->next->next = NULL;
current = current->next;
end = current;
printf("do yo want to enter more:");
r = scanf("%d",&x);
if (r != 1) exitWithFail();
}
newn = head;
while(newn != NULL)
{
printf("%d ",newn->data);
newn = newn->next;
}
printf("\n");
while(end != NULL) // Problem No. 2
{
printf("%d ",end->data);
end = end->prev;
}
printf("\n");
}
我第一次使用链表,必须创建一个可以在双链表末尾插入节点的函数。到目前为止我 Node类按顺序接受要存储的值、要指向的下一个指针的值和上一个指针的值。每当我试图在这里插入节点时,我都会得到一个错误,说有一个未处理的异常,并且在写入位置0x00000008时有访问冲突。 我不完全确定这里出了什么问题,但我认为这与根据错误消息取消引用空指针有关。我真的很感激有人帮忙解决这个问题。
题目链接 牛客网 题目描述 从尾到头反过来打印出每个结点的值。 解题思路 1. 使用递归 要逆序打印链表 1->2->3(3,2,1),可以先逆序打印链表 2->3(3,2),最后再打印第一个节点 1。而链表 2->3 可以看成一个新的链表,要逆序打印该链表可以继续使用求解函数,也就是在求解函数中调用自己,这就是递归函数。 // java public ArrayList printListFro
我目前正在为Java中的循环链表工作。我们应该能够在列表的前面插入和后面插入。但是,我已经让这些方法在循环链表类中正常工作。 我得到的结果是 对于第二次插入,这里的next指向null应该指向列表的头部。 节点类 循环链表类 主班
我有两个循环双链表,与head和integer元素(无序)相连。要删除的第一个列表中包含第二个列表中的值。你的工作怎么样?如何排除这种情况?需要搜索第一个列表中的值才能删除第二个列表?我怎样才能和他们合作?你能解释一下解决这个问题的算法吗? 例如: 我有两个循环的双链表,带有head。 L1:40100902003266 L2:60146308090 我想删除第一个列表中第二个列表中的值。第一个列
一、题目 输入个链表的头结点,从尾到头反过来打印出每个结点的值。 二、解题思路 使用栈的方式进行。 将链表从头到尾压入栈内,出栈的过程就对应着从尾到头。 三、解题代码 public class Test { /** * 结点对象 */ public static class ListNode { int val; // 结点的值
所以我从一次考试中得到了这个问题。 在单链表中,如何从尾部获得第n个节点? 这样对吗?有没有更好的解决办法?