读书人

麻烦看下,链表的题目解决办法

发布时间: 2012-06-19 14:45:20 作者: rapoo

麻烦看下,链表的题目
题目是这样的,编写一个函数,将给定链表中的最大项移到链表的末尾
我的代码是这样的,但是总是出不来结果

C/C++ code
#include<stdio.h>#include<stdlib.h>typedef struct node* link;struct node{  int item;  link next;}head;void getMaxToLast(link t){  link k=t,k1=t;  link maxt,t2;  int max=t->item;  while(k!=NULL){    t2=k;    k=k->next;    if(k->item>max){      maxt=k;      max=k->item;    }  }  t2->next=maxt->next;  while(k1->next!=NULL)    k1=k1->next;  k1->next=maxt;  maxt->next=NULL;}int main(){  int i,N;  scanf("%d",&N);  link t,x=&head;  for(i=1,t=x;i<=10;i++){    t->next=malloc(sizeof *t);    t=t->next;    t->next=NULL;    t->item=rand()%100;  }  while(x!=NULL){    printf("%d ",x->item);    x=x->next;  }  x=&head;  getMaxToLast(x);  //x=&head;  while(x!=NULL){    printf("%d ",x->item);    x=x->next;  }  return 0;}


[解决办法]
大概改了下,lz参考下。
C/C++ code
void getMaxToLast(link t){    link k=t,k1=t;    link maxt,t2;    int max=t->item;    while(k->next!=NULL){        if(k->next->item>max){            maxt=k->next;            max=k->next->item;            t2 = k;        }        k = k->next;    }    t2->next=maxt->next;    while(k1->next!=NULL)        k1=k1->next;    k1->next=maxt;    maxt->next=NULL;}
[解决办法]
void getMaxToLast(link t){
link k=t,k1=t;
link maxt,t2;
int max=t->item;
if(k->next==NULL)
return;
while(k->next!=NULL){
if(k->next->item>max){
maxt=k->next;
max=k->next->item;
t2 = k;
}
k = k->next;
}
t2->next=maxt->next;
k->next=maxt;
maxt->next=NULL;
}

不需要第二个while再找一次链表的结尾了
k就是最后一个,直接挂上就好
[解决办法]
C/C++ code
void getMaxToLast(link t){    link k=t,k1=t;    link maxt,t2;    int max=t->item;    while(k!=NULL){        t2=k;                if(k->item>max){            maxt=k;            max=k->item;        }        k=k->next;    }    //t2->next=maxt->next;    //while(k1->next!=NULL)    //    k1=k1->next;//    k1->next=maxt;//    maxt->next=NULL;    maxt->item = t2->item;    t2->item = max;} 

读书人网 >C语言

热点推荐