一個單鏈表的基本操做

 

#include <iostream>
#include <string>
#include <iomanip>
#include <ctime>
#include <cstdlib>ios

using namespace std;spa

struct Node{
 int data;
 struct Node *next;
};code

Node * Create(){
 struct Node *head = new Node;
 struct Node *p;
 head->next = NULL;
 p = head;排序

 srand(unsigned(time(NULL)));
 for(int i= 0; i<10; i++){
  struct Node *q = new Node ;
  
  q->data = rand() % 100;
  q->next = p->next;
  p->next = q;
  p = q;
 }
 p->next = NULL;ip

 return head;
}string

void LH(Node *head){  //逆置
 Node *p, *q, *r;
 p = head->next;
 q = p->next;
 p->next = NULL;
 while( NULL != q ){
  r = q;
  q = q->next;
  r->next = head->next;
  head->next = r;
 }
}io

void Disp( Node *head){
 if( NULL == head ){
  cout<<"enpty "<<endl;
  return ;
 }
 Node *p = head->next;
 while( NULL != p ){
  cout<<setw(4)<<p->data;
  p = p->next ;
 }
 cout<<endl;
}class

void sort( Node *head ){   // 就地排序
 Node *p, *q, *r, *k;
 int i = 0;
 p = head->next;
 q = p->next;
 p->next = NULL;stream

 while( NULL != q ){
  r = q;
  q = q->next;
  if( r->data < head->next->data ){
   r->next = head->next;
   head->next = r;
  }
  else {
   k = head->next;
   for(i=0; NULL != k->next && r->data > k->next->data; i++){
    k = k->next;
   }
   r->next = k->next;
   k->next = r;
  }
  
 }
}im

void delete_Link( Node *head ){
 if(NULL == head) 
    { 
        return; 
    } 
   if(NULL == head->next) 
    { 
        delete head; 
        head = NULL; 
        return; 
    } 

    Node *p = head->next; 
 Node *r;
    while(NULL != p) 
    { 
        r = p; 
        p = p->next; 
        delete r; 
    } 
    delete head; 
    head = NULL; 

}

int main(){
 Node *head = Create();
 Disp( head );
 
 LH( head );
 cout<<"\n 逆置後:"<<endl;
 Disp( head );

 sort( head );
 cout<<"\n 排序後:"<<endl;
 Disp( head );

 delete_Link( head );

 return 0; }

相關文章
相關標籤/搜索