数据结构学习---有序链表的合并

递归调用 简单

有点像归并排序的合并部分吧。

 

 

因为是用vs创建的工程,所以主函数是_tmain。

 

 1 // 链表.cpp : 定义控制台应用程序的入口点。
 2 //
 3 
 4 #include "stdafx.h"
 5 
 6 
 7 typedef struct Node {
 8     int data;
 9     struct Node *next;
10 
11 } LinkList;
12 
13 
14 //链表组合的函数 输入:两个有序无头结点链表 输出:将链表组合成一个无头结点有序链表
15 LinkList * combie(LinkList *l1, LinkList * l2) {
16 
17     LinkList * p=NULL;
18 
19     if (l1==NULL && l2==NULL)
20     {
21         p = NULL;
22     }
23     if (l1==NULL&&l2!=NULL)
24     {
25         p = (LinkList *)malloc(sizeof(LinkList));
26         p->data = l2->data;
27         p->next = combie(NULL, l2->next);
28 
29     }
30 
31     if (l2 == NULL&&l1 != NULL)
32     {
33         p = (LinkList *)malloc(sizeof(LinkList));
34         p->data = l1->data;
35         p->next = combie(l1->next,NULL);
36 
37     }
38     if (l1!=NULL && l2!=NULL)
39     {
40         p = (LinkList *)malloc(sizeof(LinkList));
41 
42         p->data = l1->data <= l2->data ? l1->data : l2->data; 
43         p->next = combie(l1->data <= l2->data ? l1->next : l1, l1->data <= l2->data ? l2 : l2->next);
44     
45     }
46     return p;
47 }
48 
49 
50 
51 //根据数组创建无头结点的链表
52 LinkList * create(int a[], int n) {
53     LinkList *h = NULL, *p, *pre = NULL;
54     for (int i = 0; i < n; i++)
55     {
56         p=(LinkList *)malloc(sizeof(LinkList));
57         p->data = a[i];
58         if (pre) pre->next = p;
59         pre = p;
60         if (i == 0) h = p;
61         if (i == n - 1) p->next = NULL;
62         
63     }
64     return h;
65 
66 
67 }
68 
69 
70 //打印输出无头结点的链表
71 void display(LinkList *list) {
72     LinkList *p = list;
73     while (p != NULL)
74     {
75         cout << p->data << " ";
76         p = p->next;
77     }
78     cout << endl;
79 
80 }
81 
82 int _tmain(int argc, _TCHAR* argv[])
83 {
84     int a []= { 1, 2, 10, 80,500 };
85     LinkList *l1 = create(a,5);
86     display(l1);
87     int b[] = { 0,4, 5, 100, 177,250 };
88     LinkList *l2 = create(b, 6);
89     display(l2);
90     LinkList * p = combie(l1, l2);
91     display(p);
92     system("pause");
93     return 0;
94 }

 stdafx.h 的内容挺简单的

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>



// TODO:  在此处引用程序需要的其他头文件
#include <iostream>
#include <cstdlib>
using namespace std;

 

posted @ 2015-06-29 18:16  &amp;nbsp;  阅读(670)  评论(0编辑  收藏  举报