C++经典算法————有序链表合并
来源:互联网 发布:linux 内存管理 书籍 编辑:程序博客网 时间:2024/05/21 22:33
有序链表合并
// addlist.cpp : 定义控制台应用程序的入口点。////有序链表合并//算法示例/////////////////////////////////////////■ ■ ■ ■ ■/////////////////////////////////////////↑/////////////////////////////////////////q1/////////////////////////////////////////■ ■ ■ ■ ■/////////////////////////////////////////↑/////////////////////////////////////////q2/////////////////////////////////////////如果q1小于q2,把q1合并到总链表的后面,然后q1=q1->next,如下图;/////////////////////////////////////////■ ■ ■ ■ ■////////////////////////////////////////////↑////////////////////////////////////////////q1/////////////////////////////////////////■ ■ ■ ■ ■/////////////////////////////////////////↑/////////////////////////////////////////q2/////////////////////////////////////////q1,q2在进行比较,如此循环,知道一个链表结束,然后把另一个链表接到总链表的后面#include "stdafx.h"#include "iostream"using namespace std;//链表数据结构struct Node{int data;Node * next;};int _tmain(int argc, _TCHAR* argv[]){Node * SortedMerge(Node * l1,Node * l2);Node * initList1(Node * t);Node * initList2(Node * t);//链表1和链表2初始化Node * list1,* list2;list1=(Node*)malloc(sizeof(Node));list2=(Node*)malloc(sizeof(Node));list1=initList1(list1);list2=initList2(list2);Node * list;//合并list=SortedMerge(list1,list2);system("pause");return 0;}//链表1初始化Node * initList1(Node * t){Node * temp;temp=t;temp->data=-1;Node * q,* p;q=temp;for (int i=0;i<5;i++){p=(Node*)malloc(sizeof(Node));p->data=i*2;q->next=p;q=p;}q->next=NULL;cout<<"list1"<<endl;q=temp;do {cout<<q->data<<endl;q=q->next;} while (q);return temp;}//链表二初始化Node * initList2(Node * t){Node * temp;temp=t;temp->data=-1;Node * q,* p;q=temp;for (int i=0;i<5;i++){p=(Node*)malloc(sizeof(Node));p->data=i*2+1;q->next=p;q=p;}q->next=NULL;cout<<"list2"<<endl;q=temp;do {cout<<q->data<<endl;q=q->next;} while (q);return temp;}//合并Node * SortedMerge(Node * l1,Node * l2){//q1 存储链表1,q2存储链表2,head记录合并后链表的头部Node * q1,*q2, *head;//list合并后的链表Node * list;q1=l1;q2=l2;//两个链表中有一个为NULL,就返回另一个,两个都为NULL,就返回NULLif (!q1||!q2){if (q1==NULL){return q2;}else{return q1;}}//确定head从小到大排序if (q1->data<=q2->data){list=q1;head=q1;q1=q1->next;}else{list=q2;head=q2;q2=q2->next;}//比较大小do {if (q1->data<=q2->data){list->next=q1;q1=q1->next;list=list->next;}else{list->next=q2;q2=q2->next;list=list->next;}} while (q1&&q2);//一条链表结束时候,把另一条链表合并到总的链表尾部if (q1==NULL){list->next=q2;}else{list->next=q1;}//输出合并后的链表cout<<"sumlist"<<endl;list=head;do {cout<<list->data<<endl;list=list->next;} while (list);return head;}
0 0
- 经典算法——合并两个有序链表
- 经典算法——合并K个有序链表
- 经典算法学习——合并两个有序链表
- C++经典算法————有序链表合并
- 数据结构例程——合并有序表
- 剑指Offer——有序链表的合并
- 合并两个有序链表——题集(一)
- 链表——两个有序链表序列的合并
- 高分笔记考研oj——1324: 算法2-2:有序线性表的有序合并,zoj
- 合并两个有序链表的算法
- 两个有序链表合并算法
- 算法:两个有序链表的合并
- 编程算法 - 合并有序链表
- 【提高篇】经典算法——有序表的二分查找
- 再回首,数据结构——有序线性表的合并
- 数据结构——算法之(033)(两个有序单链表合并为一个有序的单链表)
- 合并两个有序链表 (C++)
- 递归合并有序链表C语言
- 将登陆人ip写入txt文件
- 抛弃IIS,利用FastCGI让Asp.net与Nginx在一起
- 配置ssh公钥访问oschina
- 磁盘阵列学习记录
- 使用接插件需要注意的问题
- C++经典算法————有序链表合并
- CF -- 461C Appleman and a Sheet of Paper(线段树)
- 启动帮助文件的学习demo
- DSP6000的上电及供电
- 读书札记-2013年12月
- DSP6000的几个简单优化技巧
- HttpURLConnection的使用
- toj1339
- 再看快速排序(QuickSort)