求数据结构一算法解答

一只鱼儿 免费考研论坛/2007-09-24

原文内容来自免费考研论坛,请点击查看全文
http://bbs.freekaoyan.com/viewthread.php?tid=193372
题目:
从左到右及从右到左遍历一个单链表是可能的,其方法是在从左到右遍历的过程中将连接方向逆转。在从右到左遍历的过程中再次逆转,进行恢复。设单链表为不带头结点的单链表,试设计算法实现上述两个遍历。
typedef struct Lnode{
ElemType data;
struct Lnode *next;
}Lnode,*LinkList;

能否帮忙解答一下,谢谢!!!
---------------------------------
随便写了一个,如下,这个要自己体会

#include<stdio.h>

typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;

int main()
{
LinkList head,p,q,f;//head 是头指针

head=new Lnode; //创建链表为1 2 3 4
head->data=1;head->next=0;
p=new Lnode;p->data=4;p->next=head->next;head->next=p;
p=new Lnode;p->data=3;p->next=head->next;head->next=p;
p=new Lnode;p->data=2;p->next=head->next;head->next=p;


p=head;//打印原始链表
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");


if(head->next)//逆转
{
p=head->next;q=head;q->next=0;
while(p)
{
f=p->next;
p->next=q;
q=p;
p=f;
}
head=q;
}

p=head;//打印逆转后的链表
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");


if(head->next)//再次逆转
{
p=head->next;q=head;q->next=0;
while(p)
{
f=p->next;
p->next=q;
q=p;
p=f;
}
head=q;
}

p=head;//打印再次逆转后的链表,和原始链表一样
while(p)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");


return 0;
}

相关话题/

  • 领限时大额优惠券,享本站正版考研考试资料!
    大额优惠券
    优惠券领取后72小时内有效,10万种最新考研考试考证类电子打印资料任你选。涵盖全国500余所院校考研专业课、200多种职业资格考试、1100多种经典教材,产品类型包含电子书、题库、全套资料以及视频,无论您是考研复习、考证刷题,还是考前冲刺等,不同类型的产品可满足您学习上的不同需求。 ...
    本站小编 Free壹佰分学习网 2022-09-19