两个有序链表的归并!!!
来源:互联网 发布:疯狂的美工京东 编辑:程序博客网 时间:2024/05/29 04:33
//使用递归方法编程:已经两个链表head1和head2各自有序,
//请把它们合并成一个链表依然有序。
#if 1
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct node{
int num;
struct node * next;
}Node;
void creat(Node *head);
Node * merge_linklist(Node *head1, Node *head2);
void print(Node *head);
int main(void)
{
Node *head, *head1, *head2;
head1= (Node*)malloc(sizeof(Node));
head2= (Node*)malloc(sizeof(Node));
head1->next = NULL;
head2->next = NULL;
creat(head1);
getchar();
creat(head2);
head = merge_linklist(head1, head2);
printf("合并后链表为:/n");
print(head);
printf("/n") ;
return 0;
}
void creat(Node *head) //head 不放数据的(数据结构书page45)
{
Node *p = head;
Node *s;
int data;
printf("建立新链表,输入非数字字符将结束输入:/n");
while (1 == scanf("%d", &data)) // 尾插法
{
s = (Node *)malloc(sizeof(Node));
s->num = data;
p->next = s;
p = s;
}
p->next = NULL;
}
Node * merge_linklist(Node *head1, Node *head2)
{
Node *p, *q, *r, *head;
p = head1->next; //把P = head1就错了, 为什么啊, 我的HEAD 明明是存东西的啦,吼吼
q = head2->next ;
head = head1;
r = head;
while (p != NULL && q != NULL)
{
if (p->num <= q->num)
{
r->next = p;
r = p;
p = p->next;
}
else
{
r->next = q;
r = q;
q = q->next;
}
}
if (p)
{
r->next = p;
}
else
{
r->next = q;
}
free(head2);
return head;
}
void print(Node *head)
{
Node *p = head->next ;
while (p != NULL )
{
printf("%d/t", p->num);
p = p->next;
}
}
#endif
- 两个有序链表的归并!!!
- 归并两个有序链表
- 归并两个有序的顺序表
- 剑指off-归并两个有序链表
- 10 归并两个有序链表
- 有序链表的归并
- 有序链表的归并
- 有序链表的归并
- 有序链表的归并
- 有序链表的归并
- 有序链表的归并
- 有序链表的归并
- 有序链表的归并
- 有序的合并两个有序链表
- 链表的创建、元素插入、元素删除、以及两个有序链表的归并
- SortedList排序列表 算法实现 -- (实现了两个有序链表的归并排序功能)
- 实现两个有序数组的归并
- 归并两个有序数组
- 账户文件 /etc/passwd
- 通过实例学习Virtools脚本语言VSL - 从数组读取字符串
- 通过实例学习Virtools脚本语言VSL - 检索和修改数组的数据
- 单链表的创建, 删除, 插入, 输出
- Head First C# 中文版 第13章 控件和图形 page593
- 两个有序链表的归并!!!
- switch ----case范例
- 大协同概念兴起 行业深耕获得机会
- Oracle中数据字典的使用方法
- 简单的C++智能指针
- 协同概念以及与ERP的联系和区别
- C#连接数据库SQL(2005)
- Jquery 对 radio取值,checkbox取值,select取值,rad
- 修改linux目录的权限