麻烦看下,链表的题目解决办法
麻烦看下,链表的题目
题目是这样的,编写一个函数,将给定链表中的最大项移到链表的末尾
我的代码是这样的,但是总是出不来结果
------解决方案--------------------
大概改了下,lz参考下。
题目是这样的,编写一个函数,将给定链表中的最大项移到链表的末尾
我的代码是这样的,但是总是出不来结果
- 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; }