c语言 对链表的就地逆置的代码运行不了 求大神看看
#include <malloc.h>#include <stdio.h>
#include <stdlib.h>
typedef int Elemtype; //用户自定义数据类型
typedef struct lnode
{
Elemtype data;
struct lnode *next;
}lnode, *linklist; //结点类型
void Initlist_L(linklist &L);
void Createlist_L(linklist &L, int n);
void Print_L(linklist L);
void Inverse(linklist &L);
int main(void)
{
int len; linklist L; Initlist_L(L); //通过函数分配内存空间
printf("请输入建立的链表的长度:\n");
scanf("%d", &len);
Createlist_L(L, len); //建立含len个结点的链表
Print_L(L);
Inverse(L);
Print_L(L);
system("pause");
return 0;
}
void Initlist_L(linklist &L)
{
L = (linklist)malloc(sizeof(lnode));
if (L == NULL)
exit(1);
L->next = NULL;
}
void Createlist_L(linklist &L, int n)
{//头插法
int i;
linklist s; //这里相当于 lnode *s;
if (L == NULL)
exit(3);
printf("请你输入%d个整数:\n", n);
for (i = 0; i<n; i++)
{
s = (linklist)malloc(sizeof(lnode));
if (s == NULL) //判断s分配空间是否成功
exit(4);
scanf("%d", &s->data);
s->next = L->next;
L->next = s;
}
}
void Print_L(linklist L)
{
printf("当前链表头指针指向的值为:\n");
linklist p = L->next;
while (p)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
void Inverse(linklist &L)
/* 对带头结点的单链表L实现就地逆置 */
{
linklist last, cur, q;
q = L->next; //保存首元素地址
last = L->next;//上一个指针
cur = L->next; //当前操作的指针
if (cur){
while (cur){//此处没注意,写成了!cur,大意失荆州啊!
cur = L->next;
L->next = cur->next;
cur->next = last;
if (cur){ last = cur; }
}
L->next = last;
q->next = NULL;
}
}