首页 > 其他分享 >合并两个有序递增链表

合并两个有序递增链表

时间:2024-06-02 09:43:36浏览次数:21  
标签:ListNode third val 递增 next 链表 second 有序 first

题目如下:

 代码如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct ListNode {
 5     int val;
 6     struct ListNode *next;
 7 } ListNode_t;
 8 
 9 struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) 
10 {
11     struct ListNode* vhead;//新建一个头结点
12     struct ListNode *p = vhead;//用一个指针指向该头结点
13     while (pHead1 && pHead2)//两个链表都未比较完
14     {
15         if (pHead1->val <= pHead2->val) //表1的值更小
16         {
17             p->next = pHead1;    //先将结点连接到新表,再让原表指针后移一位,二者顺序不可换
18             pHead1 = pHead1->next;
19         }
20         else 
21         {
22             p->next = pHead2;
23             pHead2 = pHead2->next;
24         }
25         p = p->next;  //加入一个新结点后,新表指针也后移一位
26     }
27     p->next = pHead1 ? pHead1 : pHead2;  //都比较完后,哪个表非空则直接加入到新表中
28     return vhead->next;  //返回第一个结点
29 }
30 
31 int main()
32 {
33     // 链表1:1->20->95
34     ListNode_t * first_1;
35     ListNode_t * second_1;
36     ListNode_t * third_1;
37     first_1 = (ListNode_t*)malloc(sizeof(ListNode_t));
38     second_1 = (ListNode_t*)malloc(sizeof(ListNode_t));
39     third_1 = (ListNode_t*)malloc(sizeof(ListNode_t));
40     first_1->val = 1;
41     second_1->val = 20;
42     third_1->val = 95;
43     first_1->next = second_1;
44     second_1->next = third_1;
45     third_1->next = NULL;
46 
47     // 链表2:2->4->6
48     ListNode_t * first_2;
49     ListNode_t * second_2;
50     ListNode_t * third_2;
51     first_2 = (ListNode_t*)malloc(sizeof(ListNode_t));
52     second_2 = (ListNode_t*)malloc(sizeof(ListNode_t));
53     third_2 = (ListNode_t*)malloc(sizeof(ListNode_t));
54     first_2->val = 2;
55     second_2->val = 4;
56     third_2->val = 6;
57     first_2->next = second_2;
58     second_2->next = third_2;
59     third_2->next = NULL;
60 
61     ListNode_t* curr =  Merge(first_1,first_2);
62 
63     while(curr!=NULL)
64     {
65         printf("curr value = %d\n",curr->val);
66         curr = curr->next;
67     }
68 
69     return 0;
70 }

传入链表1: 1->20->95

传入链表2: 2->4->6

期望实验结果:1->2->4->6->20->95

验证结果如下:

 

标签:ListNode,third,val,递增,next,链表,second,有序,first
From: https://www.cnblogs.com/kunshanpipixia/p/18226802

相关文章

  • 单链表实现通讯录
    之前我们完成了基于顺序表(动态)实现通讯录,现在我们链表学完了,可以尝试着使用链表来实现我们的通讯录。首先我们要明白我们写的通讯录是由一个个节点组成的,每个节点里存储的就是我们的联系人信息。也就是说我们需要先写一个单链表,完成单链表的插入,删除等功能。然后在单链表......
  • 删除链表倒数第n个节点
    leetcode:19题。思路:定义快慢指针,让快指针先走n步,如何同时移动快慢指针,当快指针走到尾时,慢指针刚好是倒数第n个元素(的前一个)。例:删除倒数第二个节点。n=2;slowfast↓↓a->b->c->d->e->null/***Definitionforsingly-linkedlist.*publiccl......
  • 673. 最长递增子序列的个数
    673.最长递增子序列的个数给定一个未排序的整数数组nums,返回最长递增子序列的个数。注意这个数列必须是严格递增的。示例1:输入:[1,3,5,4,7]输出:2解释:有两个最长递增子序列,分别是[1,3,4,7]和[1,3,5,7]。示例2:输入:[2,2,2,2,2]输出:5解释:最长递增子序......
  • 链表的练习
    目录一、链表的反转二、查找中间节点三、查找倒数第k个节点四、整合两个链表五、判断是否回文一、链表的反转对单链表进行反转,把头节点置为空,然后将头节点后面的节点依次插入到头节点的前面。publicListNodeReverseList(){if(head==null){//链表为空......
  • 代码随想录算法训练营第第23天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索
    修剪二叉搜索树这道题目比较难,比添加增加和删除节点难的多,建议先看视频理解。题目链接/文章讲解:https://programmercarl.com/0669.修剪二叉搜索树.html视频讲解:https://www.bilibili.com/video/BV17P41177ud/***@param{TreeNode}root*@param{number}low*@pa......
  • 一千题,No.0039(反转链表)
    给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为1→2→3→4→5→6,K 为3,则输出应该为3→2→1→6→5→4;如果 K 为4,则输出应该为4→3→2→1→5→6,即最后不到 K 个元素不反转。输入格式:每个输入包含1个测试用例。每个测试......
  • 链表9(优化版)7-9 sdut-C语言实验-约瑟夫问题
    7-9sdut-C语言实验-约瑟夫问题分数20全屏浏览切换布局作者 马新娟单位 山东理工大学n个人想玩残酷的死亡游戏,游戏规则如下:n个人进行编号,分别从1到n,排成一个圈,顺时针从1开始数到m,数到m的人被杀,剩下的人继续游戏,活到最后的一个人是胜利者。请输出最后一个人的编号......
  • 环形链表II
    前两天一直在debug,今天才有时间好好刷一下力扣,今天在代码随想录上看到环形链表,链接如下:https://leetcode.cn/problems/linked-list-cycle-ii/description/这道题官方有两种解法,一种是相对比较简单的哈希表,还有一种是利用数学计算出他们的规律进而解题。首先说第二种,在示例中......
  • leetCode.82. 删除排序链表中的重复元素 II
    leetCode.82.删除排序链表中的重复元素II题目思路:代码classSolution{public:ListNode*deleteDuplicates(ListNode*head){autodummy=newListNode(-1);dummy->next=head;autop=dummy;while(p->next){......
  • 探索数据结构:单链表的实践和应用
    ......