博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
14--合并两个排序的链表
阅读量:5925 次
发布时间:2019-06-19

本文共 3338 字,大约阅读时间需要 11 分钟。

////  main.cpp//  combineSortedList////  Created by Hugo Cao  on 15/7/8.//  Copyright (c) 2015年 Hugo Cao . All rights reserved.///* 题目:合并两个排序的链表 输入两个递增排序的链表, 合并这两个链表并使链表中的结点仍然是按照递增顺序排列的,  例如 1 3 5 7 2 4 6 8. 测试数据:需要添加 null链表 和 相等的链表   */#include 
using namespace std;typedef struct ListNode { int m_value; ListNode *m_pnext;} ListNod, *LNode;//添加结点LNode addlistNode(int value){ LNode pNode = new ListNod(); if (pNode == NULL) { cout << "申请失败" << endl; return NULL; } pNode->m_value = value; pNode->m_pnext = NULL; return pNode;}//链接节点void connectList(LNode point1, LNode point2){ if (point1 != NULL && point2 != NULL) point1->m_pnext = point2;}//创建链表LNode createListOne(){ LNode p1 = addlistNode(1); LNode p2 = addlistNode(3); LNode p3 = addlistNode(5); LNode p4 = addlistNode(7); connectList(p1, p2); connectList(p2, p3); connectList(p3, p4); return p1;}LNode createListTwo(){ LNode p1 = NULL;// LNode p1 = addlistNode(1);// LNode p2 = addlistNode(3);// LNode p3 = addlistNode(5);// LNode p4 = addlistNode(7);// // connectList(p1, p2);// connectList(p2, p3);// connectList(p3, p4); return p1;}//输出列表void printList(LNode head){ cout << "========" << endl; if (head == NULL) { cout << "is empty" << endl; return ; } LNode p1 = head; while (p1 != NULL) { cout << p1->m_value << " "; p1 = p1->m_pnext; } cout << endl;}//合并两个排序列表LNode combineSortList(LNode p1, LNode p2){ if (p1 == NULL && p2 == NULL) // 两个链表都为空 { cout << "链表都为空,无需排序" << endl; return NULL; } if (p1 == NULL && p2 != NULL) // 其中一个为空 { return p2; } if (p1 != NULL && p2 == NULL) { return p1; } LNode head = NULL, point = NULL; //头结点和链接结点 while (p1 != NULL && p2 != NULL) { //如果2个链表出现了相同的数字,就去掉一个 if (p1->m_value == p2->m_value) { LNode fp = p1; p1 = p1->m_pnext; delete fp; } //p1,p2都不为空,如果p1 > p2. if ((p1 != NULL && p2 != NULL) && (p1->m_value > p2->m_value)) { if (point == NULL) //当point为空时,就是头结点 { point = p2; head = point; } else { point->m_pnext = p2; point = p2; } p2 = p2->m_pnext; } if ((p1 != NULL && p2 != NULL) && (p1->m_value < p2->m_value)) { if (point == NULL) //当point为空时,就是头结点 { point = p1; head = point; } else { point->m_pnext = p1; point = p1; } p1 = p1->m_pnext; } } //判断是否有剩余结点,余下全部连接。 if (p1 == NULL && p2 != NULL) { point->m_pnext = p2; } else if (p2 == NULL && p1 != NULL) { point->m_pnext = p1; } return head;}int main(){ LNode p1 = createListOne(); LNode p2 = createListTwo(); printList(p1); printList(p2); cout << "合并" << endl; LNode head = combineSortList(p1, p2); printList(head); return 0;}

 

转载于:https://www.cnblogs.com/hgonlywj/p/4842561.html

你可能感兴趣的文章
shell脚本--for循环打印下面这句话中字母数不大于6的单词
查看>>
proxmox 3.0通过USB安装到服务器上
查看>>
第二集 be动词 一般动词的现在时
查看>>
NTP服务及时间同步(CentOS6.x)
查看>>
httpd添加虚拟主机
查看>>
我的友情链接
查看>>
一个网络工程师至少要的做实验
查看>>
复制数组
查看>>
创建 OpenStack云主机 [六]
查看>>
RHEL环境搭建--Nginx|Tomcat|Java|Dubbo|RabbitMQ|Redis|Nexus|MySQL
查看>>
简历模板
查看>>
mysql用户的管理
查看>>
Guava retryer
查看>>
Java小知识
查看>>
Linux 内存测试工具memtester
查看>>
EIGRP配置实例
查看>>
PHP 正则判定中文 UTF-8 ;GBK
查看>>
构建高可用服务器之二 Keepalive参数详解
查看>>
内存管理高级1---转自光远的iOS
查看>>
Hyper-V 3.0功能部署PART 5:秒级实时迁移
查看>>