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

小小白杨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--;
}
}

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
























...全文
287 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; ……
谢谢你 我明白了
内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种分布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型分布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统中的建模与求解实践,帮助用户掌握MOPSO在实际工程问题中的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡分析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

70,038

社区成员

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

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