链表逆序问题

ffeige1984 2010-05-27 09:17:03
实现链表逆序,要求原链表的在内存中的位置不变
...全文
1200 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
匚匚 2010-05-29
  • 打赏
  • 举报
回复
8楼就没有头结点啊
[Quote=引用 11 楼 ffeige1984 的回复:]
如果没有头节点,怎么操作啊
[/Quote]
东莞某某某 2010-05-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ffeige1984 的回复:]

如果没有头节点,怎么操作啊
[/Quote]

这个不是个大问题吧
ffeige1984 2010-05-29
  • 打赏
  • 举报
回复
如果没有头节点,怎么操作啊
匚匚 2010-05-29
  • 打赏
  • 举报
回复
 typedef struct Node *List;
List ReverList(List L) //单链表反转函数 无表头
{
List curPos,nexPos,prePos; //分别是当前的、下一个、前一个
prePos=NULL;
curPos=L;
nexPos=L->next;

while(nextPos!=NULL)
{
curPos->next=prePos;
prePos=curPos;
curPos=nexPos;
nexPos=nexPos->next;
}
curPos->next=prePos;
return curPos;
}
budweiser 2010-05-27
  • 打赏
  • 举报
回复
楼主可以看下 STL 关于 list 的实现, 其是通过一个private函数 transform 来实现很多public功能的, 如 reverse insert 等,
时间一粒 2010-05-27
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define LIST_INIT_SIZE 100

typedef int ElemType;
typedef int Status;

typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
/////////创建链表
Status CreateLst(LinkList &L,int n)
{
int i;
L=(LinkList)malloc(sizeof(LNode));
if(!L) {exit(OVERFLOW);}
L->next=NULL;
printf("输入数据:\n");
for(int i=0;i<n;++i)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
return OK;
}
///逆置操作
Status OrderLst(LinkList &L)
{
LinkList p,q,r;
p=L->next;
//p->next=NULL;
//L->next=p;
q=p->next;
p->next=NULL;
while(q->next){
r=q->next;
q->next=p;
p=q;
q=r;
}
q->next=p;
L->next=q;
printf("逆序输出\n");
return OK;
}

///输出元素
Status PrintLst(LinkList L)
{
if(L==NULL){printf("链表未创建!\n");exit(1);}
printf("链表的元素为:");
while(L->next)
{
L=L->next;
printf("%d ",L->data);
}
printf("\n");
return OK;
}
////////主函数
int main()
{
int n=0;
LinkList Lst;
printf("请输入链表的个数:");
scanf("%d",&n);
CreateLst(Lst,n);
PrintLst(Lst);
OrderLst(Lst);
PrintLst(Lst);
system("pause");
}

匚匚 2010-05-27
  • 打赏
  • 举报
回复

typedef struct Node *List;
List ReverList(List L) //单链表反转函数 无表头
{
List curPos,nexPos,prePos; //分别是当前的、下一个、前一个
prePos=NULL;
curPos=L;
nexPos=L->next;

while(nextPos!=NULL)
{
curPos->next=prePos;
prePos=curPos;
curPos=nexPos;
nexPos=nexPos->next;
}
curPos->next=prePos;
return curPos;
}
thehunters 2010-05-27
  • 打赏
  • 举报
回复
void rsort(node**head)
{

node*r,*p=(*head)->next ,*f=*head;
while( p )
{
r = p->next ;
p->next = f;
f = p;
p=r;

}
*head =f;
}
renzhewh 2010-05-27
  • 打赏
  • 举报
回复
链表S
将 pWork 指向链表,S 置为空
将 pWork 指向的链表,头插入 S 中
向立天 2010-05-27
  • 打赏
  • 举报
回复
就是从头到尾修改next指针呗
zhangweiit 2010-05-27
  • 打赏
  • 举报
回复
链接逆序,是不需要改变整个链表的内存位置的
只要一个中间变量就可以做到替换
冻结 2010-05-27
  • 打赏
  • 举报
回复
画个图,定义几个指针,摆弄一下指针,就出来了。
renzhewh 2010-05-27
  • 打赏
  • 举报
回复
倒插入法
huanmie_09 2010-05-27
  • 打赏
  • 举报
回复
看下这个链接的内容:
http://topic.csdn.net/u/20100407/08/941ef0e3-54af-4dc0-96c3-c7f8edb9b00b.html

69,369

社区成员

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

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