读书人

求解链表的逆置解决方案

发布时间: 2012-02-13 17:20:26 作者: rapoo

求解,链表的逆置
是这样的,总共有四个题目,分别是:.计算带头结点的单链表的结点个数。(递归和非递归两种算法)

2. 带头结点的单链表的结点数据均为非零正整数,求所有结点数据之和。

3. 带头结点的单链表的结点数据为非零正整数,求结点中数据的最大值。

4. 对带头结点的单链表进行就地逆置。

头三个我看着别人的整出来了,但是最后一个就不行了,总是出错,我怀疑是输出表和逆置的子程序有问题,求高手解答啊。。。


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

typedef int elemtype;
typedef struct LNode
{
elemtype data;
struct LNode *next;
}LNode,*LinkList;

void creatlist(LinkList &L)
{
LinkList p;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
p=(LinkList)malloc(sizeof(LNode));
printf("input elements: \n");
scanf("%3d",&p->data);
p->next=L->next;
L->next=p;
while(p->data!=0)
{
p=(LinkList)malloc(sizeof(LNode));
scanf("%3d",&p->data);
p->next=L->next;
L->next=p;
}
}

int countnode(LinkList &L) //计算结点
{
int count=1;
LinkList p;

p=L;
while(p->next!=NULL)
{
p=p->next;
count++;
}
return count;
}


int countelements(LinkList &L)//计算数和
{
LinkList p;
int m=0;
p=L;
while(p->next!=NULL)
{
p=p->next;
m+=p->data;
}
return m;
}

int maxelement(LinkList &L)//求最大数
{
LinkList p;
p=L;
int max=0;
while(p->next!=NULL)
{
p=p->next;
if(p->data>max)
max=p->data;
}
return max;
}


void printlist(LinkList &L) //打印链表
{
LinkList p;
p=L;
while(p->next!=NULL)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
}

void reverselist(LinkList &L)//逆置链表程序
{
LinkList p,q,s;
s=p=q=L;
q=q->next;
p->next=NULL;
while(q!=NULL)
{
s=q->next;
q->next=p->next;
p->next=q;
q=s;
}
}


void main()
{
LinkList L;
creatlist(L);
printf("节点数为%d\n",countnode(L));
printf("各结点数之和为%d\n",countelements(L));
printf("最大元素是%d\n",maxelement(L));
reverselist(L);
printf("逆置后的结果是:\n");
printlist(L);
}


[解决办法]
看了半天也没看出楼主
void reverselist(LinkList &L)
方法哪出问题了
我咋就感觉是对的呢
[解决办法]

C/C++ code
void reverselist(LinkList &L) //逆置链表程序{    LinkList p,q,s;    s=p=q=L;    q=q->next;    p->next=NULL;    while(q!=NULL)    {        s=q->next;        q->next=p;        p= q;        q = s;    }}              //楼主注意别直接复制到帖子上,看起来很不舒服
[解决办法]
你是要求带头结点的逆序
[code=C/C++][/code]
void reverse(LinkList *h)
/* h为头结点 */
{
LinkList p,q;
p=h->next;
h->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=h->next;
h->next=q;
}
}

读书人网 >软件架构设计

热点推荐