编程练习5

单链表的逆转和排序练习

排序还有些问题

  1 //链表逆置 指针的指针
  2 #include <iostream>
  3 using namespace std;
  4 
  5 typedef struct node
  6 {
  7     int data;
  8     node* next;
  9 }node;
 10 
 11 node* create()
 12 {
 13     node *h=(node*)malloc(sizeof(node)),*p;
 14     h->data=0;
 15     h->next=NULL;
 16     p=h;
 17 
 18     int num;
 19     while(cin>>num)
 20     {
 21         if(num)
 22         {
 23             node* q=(node*)malloc(sizeof(node));
 24             q->data=num;
 25             q->next=NULL;
 26             p->next=q;
 27             p=q;
 28         }
 29         else
 30             break;
 31     }
 32 
 33     return h;
 34 }
 35 
 36 void sort(node* h)                //非递归实现
 37 {
 38     node* p=h->next,*pre,*q,*s,*s1=NULL;
 39     if(h==NULL || p==NULL) return;
 40     pre=h;
 41     q=p->next;
 42     bool flag=false;
 43 
 44     while(q)
 45     {
 46         s=q->next;
 47         while(p!=q)
 48         {
 49             if(q->data<p->data)
 50             {
 51                 if(!flag)
 52                 {
 53                     s1=p;
 54                     while(p->next!=q)
 55                         p=p->next;
 56                     p->next=NULL;
 57                     flag=true;
 58                     p=s1;
 59                 }
 60                 q->next=p;
 61                 pre->next=q;
 62                 break;
 63             }
 64             else
 65             {
 66                 if(p->next==NULL)
 67                 {
 68                     p->next=q;
 69                     break;
 70                 }
 71                 else
 72                 {
 73                     pre=p;
 74                     p=p->next;
 75                 }
 76             }
 77         }
 78         q=s;
 79         pre=h;
 80         p=pre->next;
 81     }
 82 }
 83 //逆序输出
 84 void reverse(node* h)
 85 {
 86     node* p=h->next,*q,*s,*s1;
 87     if(h==NULL || p==NULL) return;
 88     q=p->next;
 89     s=p;
 90 
 91     while(q)
 92     {
 93         s1=q->next;
 94         if(s1==NULL) 
 95         {
 96             h->next=q;
 97             q->next=p;
 98             s->next=NULL;
 99         }
100         q->next=p;
101         p=q;
102         q=s1;
103     }
104 }
105 void print(node* h)
106 {
107     node* p=h->next;
108     while(p)
109     {
110         cout<<p->data<<" ";
111         p=p->next;
112     }
113     cout<<endl;
114 }
115 
116 int main()
117 {
118     node* head;
119     head=create();
120 
121     print(head);
122     sort(head);
123     //reverse(head);
124 
125     print(head);
126 
127     return 0;
128 }

 

posted on 2012-09-12 08:47  lyncre  阅读(144)  评论(0)    收藏  举报

导航