1 #include<iostream>
2
3 struct Node
4 {
5 int data;
6 Node *next;
7 };
8
9 typedef struct Node Node;
10
11 Node *Reverse(Node *head)
12 {
13 if (NULL == head || NULL == head->next)
14 return head;
15 Node *p1 = head;
16 Node *p2 = p1->next;
17 Node *p3 = p2->next;
18 p1->next = NULL;
19 while (p3 != NULL)
20 {
21 p2->next = p1;
22 p1 = p2;
23 p2 = p3;
24 p3 = p3->next;
25 }
26
27 p2->next = p1;
28 head = p2;
29 return head;
30 }
31
32 // 循环算法
33 Node *Merge(Node *head1, Node *head2)
34 {
35 if (NULL == head1)
36 return head2;
37 if (NULL == head2)
38 return head1;
39 Node *head = NULL;
40 Node *p1 = NULL;
41 Node *p2 = NULL;
42 if (head1->data < head2->data)
43 {
44 head = head1;
45 p1 = head1->next;
46 p2 = head2;
47 }
48 else
49 {
50 head = head2;
51 p2 = head2->next;
52 p2 = head1;
53 }
54
55 Node *cur = head;
56 while (NULL!=p1 && NULL!=p2)
57 {
58 if (p1->data < p2->data)
59 {
60 cur->next = p1;
61 cur = p1;
62 p1 = p1->next;
63 }
64 else
65 {
66 cur->next = p2;
67 cur = p2;
68 p2 = p2->next;
69 }
70 }
71 if (NULL == p1)
72 cur->next = p2;
73 if (NULL == p2)
74 cur->next = p1;
75
76 return head;
77 }
78
79 // 递归算法
80 Node *MergeRecursive(Node *head1, Node *head2)
81 {
82 if (NULL == head1)
83 return head2;
84 if (NULL == head2)
85 return head1;
86 Node *head = NULL;
87
88 if (head1->data < head2->data)
89 {
90 head = head1;
91 head->next = MergeRecursive(head1->next, head2);
92 }
93 else
94 {
95 head = head2;
96 head->next = MergeRecursive(head1, head2->next);
97 }
98
99 return head;
100 }
101
102 int main(void)
103 {
104 return 0;
105 }

C++单链表反转、两有序链表合并仍有序的更多相关文章

  1. 2、java数据结构和算法:单链表: 反转,逆序打印, 合并二个有序链表,获取倒数第n个节点, 链表的有序插入

    什么也不说, 直接上代码: 功能点有: 1, 获取尾结点 2, 添加(添加节点到链表的最后面) 3, 添加(根据节点的no(排名)的大小, 有序添加) 4, 单向链表的 遍历 5, 链表的长度 6, ...

  2. c# 有序链表合并 链表反转

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. Java单链表反转图文详解

    Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...

  4. C语言实现单链表,并完成链表常用API函数

    C语言实现单链表,并完成链表常用API函数: 1.链表增.删.改.查. 2.打印链表.反转打印.打印环形链表. 3.链表排序.链表冒泡排序.链表快速排序. 4.求链表节点个数(普通方法.递归方法). ...

  5. 【剑指offer】两个链表的第一个公共结点,C++实现

    原创文章,转载请注明出处! 博客文章索引地址 # 题目 #举例 如果两个单向链表有公共的节点,那么这两个链表从第一个公共结点开始,之后所有结点都是重合的,不可能再出现分叉.拓扑结构如下图所示: # 思 ...

  6. 两个有序数组合并成一个有序数组(要求时间复杂度为O(n))

    面试题: 怎样把两个有序数组合并成有序数组呢 逻辑步骤: 1.假设两个数组为A和B 2.A和B都是从小到大的顺序进行排列 ** 1.我们可以直接比较两个数组的首元素,哪个小就把这个小元素放入可变数组. ...

  7. PAT 02-线性结构1 两个有序链表序列的合并 (15分)

    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个递增的整数序列. 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef ...

  8. 剑指offer——python【第16题】合并两个有序链表

    题目描述 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1-& ...

  9. 含头结点的单链表C++实现(包含创建,查找,插入,追加,删除,反转,排序,合并,打印,清空,销毁等基本操作)

    温馨提示:下面代码默认链表数据为字符型,本代码仅供参考,希望能对找到本随笔的人有所帮助! #include<iostream> using namespace std; typedef s ...

随机推荐

  1. Kubernetes --(k8s)入门

    k8s 简介: 什么是k8s? Kubernetes (k8s)是Google开源的容器集群管理系统(谷歌内部:Borg).在Docker技术基础上,为容器化的应用提供部署运行.资源调度.服务发现和动 ...

  2. 【xml】控件常用属性

    https://www.cnblogs.com/xqz0618/p/textview.html (常用,生动) https://www.jianshu.com/p/992324336dd9 (全,简洁 ...

  3. cartographer环境建立以及建图测试(详细级)

  4. VS CODE远程办公篇一

    作者:良知犹存 转载授权以及围观:欢迎添加微信:becom_me 总述     因为疫情的来临,让远程办公变得原来越火.这次我也是盯上了这个功能,实现在家里远程配置电脑. 嵌入式Linux开发的程序员 ...

  5. 力扣1423. 可获得的最大点数-C语言

    题目 题目链接 几张卡牌 排成一行,每张卡牌都有一个对应的点数.点数由整数数组 cardPoints 给出. 每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌. 你的点数就是 ...

  6. 线程不安全(Arraylist,HashSet,HashMap)和写时复制

    package com.yangyuanyuan.juc1205; import java.util.List; import java.util.Map; import java.util.Set; ...

  7. Codeforces Round #635 (Div. 1)

    传送门 A. Linova and Kingdom 题意: 给定一颗以\(1\)为根的树,现在要选定\(k\)个结点为黑点,一个黑点的贡献为从他出发到根节点经过的白点数量. 问黑点贡献总和最大为多少. ...

  8. MySQL8.0数据库出现的问题——外码创建方式、外键约束两个引用列不兼容问题、check约束问题、用触发器代替check约束、关键字DELIMITER、删除添加索引、删除添加外键约束、和一些数据库方面的操作

    一.首先先说一下我们都需要建立那些表 mysql> CREATE TABLE IF NOT EXISTS `student`( -> `sno` CHAR(8) NOT NULL, -&g ...

  9. java——final、权限修饰符

    final修饰类:  final修饰成员方法: final修饰局部变量的时候: 对于基本类型来说,变量的数值不能改变 对于引用类型来说,变量的地址不能改变 final修饰成员变量的情况: 权限修饰符:

  10. Java 窗口 绘制图形 #1

    写在前面: editplus换成eclipse了 Sketchpad要钱,买不起 自己搞(rua) by emeralddarkness 建立了一个平面直角坐标系 两个变元x,y,参数i 实现了以下功 ...