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