list* reverse(list *head)
{
list *beg=NULL,*mid=head,*end=mid->next;
while(mid)
{
mid->next=beg;
beg=mid;
mid=end;
end=end->next;
}
head=beg;
return head;
}
反转链表为什么没结果
你怎么调用的,贴出你的调用代码看看
list* reverse(list *head) {
list *curr = head;
list *prev = NULL;
list *next = NULL;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
这么改,供参考:
list* reverse(list *head)
{
list *beg=NULL,*mid=head; //,*end=mid->next;
head = NULL;
while(mid)
{
//mid->next=beg;
beg = mid;
mid = mid->next; //mid=end;
beg->next = head;
head = beg;
}
//head=beg;
return head;
}
bool insertNextNode(LNode *p, int e) {
if (p == NULL)
return false;
LNode *q = (LNode *)malloc(sizeof(LNode)); //创建一个新结点
if (q == NULL) {
return false;
}
q->data = e;
//注意这两步顺序不能错
q->next = p->next;
p->next = q;
return true;
}
问题解答:
答:需要看具体代码才能判断,可能是代码错误,也有可能是逻辑错误,需要仔细检查。以下是一个简单的单向链表反转操作的代码示例:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LinkNode {
ElemType data; // 节点数据
struct LinkNode *next; // 节点指针
} LinkNode, *LinkList;
// 链表反转函数
LinkList ReverseList(LinkList head)
{
LinkList p = head, q = NULL; // p用于保存当前节点的指针, q用于保存上一个节点的指针
while (p != NULL) {
LinkList r = p->next;
p->next = q;
q = p;
p = r;
}
return q;
}
// 打印链表
void PrintList(LinkList head)
{
LinkList p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
// 创建链表
LinkList CreateList(int n)
{
LinkList head = NULL, tail = NULL;
for (int i = 0; i < n; i++) {
LinkList p = (LinkList)malloc(sizeof(LinkNode));
scanf("%d", &(p->data));
p->next = NULL;
if (head == NULL) {
head = p;
tail = p;
} else {
tail->next = p;
tail = p;
}
}
return head;
}
int main()
{
int n;
scanf("%d", &n);
LinkList list = CreateList(n);
PrintList(list);
list = ReverseList(list);
PrintList(list);
return 0;
}
答:需要看具体代码才能判断,如果定义不正确会导致程序出现各种错误,从代码中没有提供足够的信息识别该问题。
答:先构建好链表,然后直接调用链表反转函数,最后输出结果即可。上面的代码已经给出了一个完整示例。
答:链表反转函数只需要接收一个链表的头指针作为参数,其他的无需特定输入格式。
答:面对这个问题,有可能是链表的头指针未被传入函数,导致无法执行反转操作;也有可能是函数本身逻辑出现问题。此外,如果在函数中有动态申请内存,而内存申请失败,同样会导致函数调用失败。