关于实现单链表的逆置,输出的是乱码 大神指点一下哈

小小白杨123 2012-12-29 08:51:45
//链表的结点定义
struct List{
ElemType e;
struct List *next;
};

//实现单链表的逆置
void NiZhi(struct List la)
{
struct List *p,*q;
p=&la;
while(p->next!=NULL)
{
P=P->next;
}
q=p;
while(q!=&la)
{
printf("%c",q->e);
q--;
}
}

//只是部分代码,阅读不困难吧.....
























...全文
219 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengfoo 2012-12-29
  • 打赏
  • 举报
回复
Node *link_reverse(Node *head)
{
	Node *pre,*cur,*next;
	/*head->pnext =NULL;*/

	pre = head;
	cur = pre->pnext;
	next = cur->pnext;
	head->pnext =NULL;//第一次的pre,cur,next

	if(next == NULL)//链表只有两个节点,如果没有此语句,当链表确实只有两个节点时,就会发生错误。
	{
		cur->pnext = pre;
		head = cur;
		return head;
	}

	while(next->pnext != NULL)
	{
		cur->pnext = pre;//修改指针,每次循环修改一次

		pre = cur;
		cur = next;
		next = next->pnext;
	}//循环终止时,next->pnext == NULL
	cur->pnext = pre;
	next->pnext = cur;
	head = next;
	return head;

}
Klissan 2012-12-29
  • 打赏
  • 举报
回复

void Revert(struct List *head, struct List *temp)
{
 while(head!=NULL)
  { 
  temp=head->next;
  head->next=head;
  head=temp->next;
  }
}

这个函数可以实现应该可以实现逆置...但是第一个节点和最后一个怎么处理没想好
东大坡居士 2012-12-29
  • 打赏
  • 举报
回复

while(q!=&la)
 { 
 printf("%c",q->e);
 q--;//链表存储是非连续的,你怎么能用q--呢
 }
 
zhcosin 2012-12-29
  • 打赏
  • 举报
回复
q-- ? 你是想让退到上一个节点,大错特错了,链表的元素不是一片连续的内存空间,不然还用什么 next 指针么? 另外,你的链表定义都有问题,链表应是节点的指针而不是节点本身。在函数内部处理链表的时候应该传递指针的。 还有,如果你希望方便的退回到上一个节点,可以使用双向链表。 最后,链表的实现可以参考一下: http://blog.csdn.net/zhcosin/article/details/8300001
小小白杨123 2012-12-29
  • 打赏
  • 举报
回复
引用 1 楼 zhcosin 的回复:
q-- ? 你是想让退到上一个节点,大错特错了,链表的元素不是一片连续的内存空间,不然还用什么 next 指针么? 另外,你的链表定义都有问题,链表应是节点的指针而不是节点本身。在函数内部处理链表的时候应该传递指针的。 还有,如果你希望方便的退回到上一个节点,可以使用双向链表。 最后,链表的实现可以参考一下: http://blog.csdn.net/zhcosin……
谢谢提供这么好的网站
小小白杨123 2012-12-29
  • 打赏
  • 举报
回复
引用 3 楼 Klissan 的回复:
C/C++ code?123456789void Revert(struct List *head, struct List *temp){ while(head!=NULL) { temp=head->next; head->next=head; head=temp->next; }} 这个函数可以实现应该可以实现逆置...但是第一个节点和最后一个怎么处理……
有些混乱 next指针没有修改吧
小小白杨123 2012-12-29
  • 打赏
  • 举报
回复
引用 4 楼 kuzuozhou 的回复:
C/C++ code?12345678910111213141516171819202122232425262728293031Node *link_reverse(Node *head){ Node *pre,*cur,*next; /*head->pnext =NULL;*/ pre = head; cur = pre->pnext; ……
谢谢你 我明白了

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧