posts - 183,  comments - 10,  trackbacks - 0

合并两个有序的单链表

http://www.cppblog.com/jake1036/archive/2011/06/15/148692.html

  1 #include <iostream>
  2 using namespace std;
  3 
  4 struct node
  5 {
  6     int data;
  7     node* next;
  8 };
  9 
 10 void clear(node* head)
 11 {
 12     node* t = head->next, * p;
 13     while (t != 0)
 14     {
 15         p = t;
 16         t = t->next;
 17         delete p;
 18     }
 19     delete head;
 20 }
 21 
 22 void print(node* head)
 23 {
 24     while (head->next != 0)
 25     {
 26         cout << head->next->data << ' ';
 27         head = head->next;
 28     }
 29     cout << endl;
 30 }
 31 
 32 node* init()
 33 {
 34     node* ret = new node;
 35     ret->next = 0;
 36     return ret;
 37 }
 38 
 39 node* build(node* head, int item)
 40 {
 41     node* t = new node;
 42     t->next = 0;
 43     t->data = item;
 44     head->next = t;
 45     return t;
 46 }
 47 
 48 node* merge(node* h, node* h1, node* h2)
 49 {
 50     h1 = h1->next;
 51     h2 = h2->next;
 52     node* t;
 53     while (h1 != 0 && h1 != 0)
 54     {
 55         if (h1->data < h2->data)
 56         {
 57             t = new node;
 58             t->data = h1->data;
 59             t->next = 0;
 60             h->next = t;
 61             h = h->next;
 62 
 63             h1 = h1->next;
 64         }
 65         else if (h1->data > h2->data)
 66         {
 67             t = new node;
 68             t->data = h2->data;
 69             t->next = 0;
 70             h->next = t;
 71             h = h->next;
 72 
 73             h2 = h2->next;
 74         }
 75         else
 76         {
 77             t = new node;
 78             t->data = h1->data;
 79             t->next = 0;
 80             h->next = t;
 81             h = h->next;
 82             t = new node;
 83             t->data = h2->data;
 84             t->next = 0;
 85             h->next = t;
 86             h = h->next;
 87 
 88             h1 = h1->next;
 89             h2 = h2->next;
 90         }
 91     }
 92     while (h1 != 0)
 93     {
 94         t = new node;
 95         t->data = h1->data;
 96         t->next = 0;
 97         h->next = t;
 98         h = h->next;
 99 
100         h1 = h1->next;
101     }
102     while (h2 != 0)
103     {
104         t = new node;
105         t->data = h2->data;
106         t->next = 0;
107         h->next = t;
108         h = h->next;
109 
110         h2 = h2->next;
111     }
112 
113     return h;
114 }
115 
116 int main()
117 {
118     node* h1 = init(), * h2 = init();
119     node* t = h1;
120     for (int i = 1; i <= 10; i += 2)
121     {
122         t = build(t, i);
123     }
124     t = h2;
125     for (int i = 0; i <= 10; i += 2)
126     {
127         t = build(t, i);
128     }
129     print(h1);
130     print(h2);
131 
132     node* h = init();
133 
134     merge(h, h1, h2);
135 
136     print(h);
137 
138     clear(h1);
139     clear(h2);
140     clear(h);
141 }

 


posted on 2011-07-31 18:25 unixfy 阅读(576) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理