首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-01-17 
关于实现单链表的逆置,输出的是乱码大神指点一下哈//链表的结点定义struct List{ElemType estruct List *

关于实现单链表的逆置,输出的是乱码 大神指点一下哈
//链表的结点定义
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--;
}
}

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

























[解决办法]
q-- ? 你是想让退到上一个节点,大错特错了,链表的元素不是一片连续的内存空间,不然还用什么 next 指针么?
另外,你的链表定义都有问题,链表应是节点的指针而不是节点本身。在函数内部处理链表的时候应该传递指针的。
还有,如果你希望方便的退回到上一个节点,可以使用双向链表。
最后,链表的实现可以参考一下: http://blog.csdn.net/zhcosin/article/details/8300001
[解决办法]

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;

}

热点排行
Bad Request.