user-0 提问: 看看数据结构的单链表逆转 出错了

回复:
user: user-1
content: typedef struct LinkNode{ 	char c; 	struct LinkNode *next; }LinkNode,*LinkList;  void reserse(LinkList *head) { 	LinkList p=*head; 	LinkList q=NULL; 	while(p) 	{ 		LinkList l=p->next; 		p->next=q; 		q=p; 		p=l; 	} 	*head=q; } 不知道你的linklist是节点还是指针，节点的话为什么还有个node，指针的话赋值就出错了。以上供参考。

user: user-2
content: 用递归或者栈

user: user-1
content: 引用 1 楼 envenler 的回复:p=L->next ;  L->next= NULL;  这不是直接p = NULL吗？ 不是吧。。。。

user: user-3
content: 单链表，有很多种哦，带不带空头结点，，是否循环链表。都会影响算法的。  带头节点的，只要传递链表的头结点即可。 不带的要改变头结点，可能需要传递头结点的指针，或者引用。 C++ 引用传递，除了参数是头结点的引用，形参类型为节点（指针类型）的引用。 不带和带头节点差不多，只是不带的头结点要在逆转后变成尾节点。  不带头节点，C需要传递， 节点（指针类型）的指针，实质是二级指针。 所以语法就有点别扭。  循环链表，一般是尾指针表示，也可以双指针表示。 逆转时，注意一下，别在链表中插入环，否则有可能无限循环。 程序死循环了，一般这种情况，称为死机。

user: user-0
content: 引用 5 楼 lubyam 的回复:没有调试，仅供参考   LinkList reserse(LinkList *L)  { 	 	Node *p,*q;    	p=L->next ;     	q=p->next; 	L->next=NUll;    	while(p!=NULL) 	{ 		p->next=L; 		L=p; 		p=q; 		q=q->next;     	}  }  总是提示p=L->next ; 出错

user: user-4
content: 引用 1 楼 envenler 的回复:p=L->next ;  L->next= NULL;  这不是直接p = NULL吗？  你确定p=NULL?

user: user-4
content: 没有调试，仅供参考   LinkList reserse(LinkList *L)  { 	 	Node *p,*q;    	p=L->next ;     	q=p->next; 	L->next=NUll;    	while(p!=NULL) 	{ 		p->next=L; 		L=p; 		p=q; 		q=q->next;     	}  }

user: user-5
content: 引用 3 楼 jemii 的回复:在while循环里  p->next=L->next; 在之前L->next已经被你置为空了, 我的想法是增加一个值来保存逆序前的节点,我默认函数的参数就是链表第一个元素了,以下是我的代码   LinkList reserse(LinkList *L) { 	LinkList *t,*p,*q; 	if(L == NULL ||L->next == NULL) 		return L; 	t=L;                                   //t指向链表的第一个节点                                                   	p=t->next; 	t->next = NULL; 	while(p) 	{ 		q=p->next; 		p->next = t; 		t=p; 		p=q; 	} 	 	L=t;                                  //将链表第一个节点指向t 	return L; }  好吧 返回值少了个*

user: user-5
content: 在while循环里  p->next=L->next; 在之前L->next已经被你置为空了, 我的想法是增加一个值来保存逆序前的节点,我默认函数的参数就是链表第一个元素了,以下是我的代码   LinkList reserse(LinkList *L) { 	LinkList *t,*p,*q; 	if(L == NULL ||L->next == NULL) 		return L; 	t=L;                                   //t指向链表的第一个节点                                                   	p=t->next; 	t->next = NULL; 	while(p) 	{ 		q=p->next; 		p->next = t; 		t=p; 		p=q; 	} 	 	L=t;                                  //将链表第一个节点指向t 	return L; }

user: user-4
content: 引用 7 楼 qing498745097 的回复:[quote=引用 5 楼 lubyam 的回复:] 没有调试，仅供参考   LinkList reserse(LinkList *L)  { 	 	Node *p,*q;    	p=L->next ;     	q=p->next; 	L->next=NUll;    	while(p!=NULL) 	{ 		p->next=L; 		L=p; 		p=q; 		q=q->next;     	}  }  总是提示p=L->next ; 出错[/quote]  额。。。。。你这next应该是一个LinkList  的指针？

user: user-6
content: 引用 8 楼 qing498745097 的回复:[quote=引用 4 楼 jemii 的回复:] [quote=引用 3 楼 jemii 的回复:] 在while循环里  p->next=L->next; 在之前L->next已经被你置为空了, 我的想法是增加一个值来保存逆序前的节点,我默认函数的参数就是链表第一个元素了,以下是我的代码   LinkList reserse(LinkList *L) { 	LinkList *t,*p,*q; 	if(L == NULL ||L->next == NULL) 		return L; 	t=L;                                   //t指向链表的第一个节点                                                   	p=t->next; 	t->next = NULL; 	while(p) 	{ 		q=p->next; 		p->next = t; 		t=p; 		p=q; 	} 	 	L=t;                                  //将链表第一个节点指向t 	return L; }  好吧 返回值少了个*[/quote] 提示 if(L == NULL ||L->next == NULL)出错了[/quote] 是编译报错了么 报了什么错 我没有调试 所以不知道 这个只是判断你传进来的是不是空链表或者链表只有一个节点

user: user-0
content: 引用 4 楼 jemii 的回复:[quote=引用 3 楼 jemii 的回复:] 在while循环里  p->next=L->next; 在之前L->next已经被你置为空了, 我的想法是增加一个值来保存逆序前的节点,我默认函数的参数就是链表第一个元素了,以下是我的代码   LinkList reserse(LinkList *L) { 	LinkList *t,*p,*q; 	if(L == NULL ||L->next == NULL) 		return L; 	t=L;                                   //t指向链表的第一个节点                                                   	p=t->next; 	t->next = NULL; 	while(p) 	{ 		q=p->next; 		p->next = t; 		t=p; 		p=q; 	} 	 	L=t;                                  //将链表第一个节点指向t 	return L; }  好吧 返回值少了个*[/quote] 提示 if(L == NULL ||L->next == NULL)出错了

user: user-7
content: Ｐ指向Ｌ，Ｌ指向Ｐ　，ＮＵＬＬ＝ＮＵＬＬ，这不是０等于０

user: user-8
content: p=L->next ;  L->next= NULL;  这不是直接p = NULL吗？