链表习题(7)-将两个递增单链表合并成一个递减单链表

 1 /*将两个递增单链表合并成一个递减单链表*/
 2 /*
 3     算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将较小的
 4     结点链入链表中,同时后移工作指针。由于结果链表是递减的,故使用头插法建立新链表。比较结束后,
 5     可能会有一个链表非空,此时用头插法将剩下的结点依次插入新链表中即可。
 6 */
 7 void Union_List(LinkList& La,LinkList& Lb)
 8 {
 9     LNode *r, *pa = La->next, *pb = Lb->next;    //pa,pb分别是La,Lb的工作指针
10     La->next = NULL;        //将La作为结果链表的头指针
11     while (pa&&pb)
12     {
13         if (pa->data <= pb->data)
14         {
15             r = pa->next;        //r暂存pa的后继结点指针
16             pa->next = La->next;        //头插法插入pa所指结点
17             La->next = pa;
18             pa = r;
19         }
20         else
21         {
22             r = pb->next;
23             pb->next = La->next;
24             La->next = pb;
25             pb = r;
26         }
27         while (pa)        //处理剩下的结点
28         {
29             r = pa->next;
30             pa->next = La->next;
31             La->next = pa;
32             pa = r;
33         }
34         while (pb)
35         {
36             r = pb->next;
37             pb->next = La->next;
38             La->next = pb;
39             pb = r;
40         }
41     }
42     free(Lb);
43 }

原文地址:https://www.cnblogs.com/KBryant/p/11650007.html

时间: 2024-10-11 17:45:06

链表习题(7)-将两个递增单链表合并成一个递减单链表的相关文章

单链表查找最大值、两个递增的链表合并并且去重

单链表查找最大值 代码: 1 #include<iostream> 2 #include<bits/stdc++.h> 3 using namespace std; 4 struct Node{ 5 int value; 6 Node * next; 7 }; 8 Node *a=new Node; //创建头指针 9 void build_link(Node * a,int n){ //建表 10 Node *p; 11 p=a; 12 for(int i=0;i<n;i+

将两个单向有序链表合并成一个单向有序链表

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 typedef struct student //声明结构体 5 { 6 int num; 7 struct student *pnext; 8 }stu,*pstu; 9 void link_sort_insert(pstu *,pstu *,int); //建立有序链表 10 void link_show(pstu ); 11 voi

两个有序单链表合并成一个有序单链表的java实现

仅作为备注, 便于自己回顾. import java.util.Arrays; public class MergeSort { public static class LinkedNode<V extends Comparable<V>> { public V value; public LinkedNode<V> next; public LinkedNode(V value) { this.value = value; } public LinkedNode(V

将两个有序顺序表合并成一个新的有序顺序表

#include <stdio.h> #include <malloc.h> #include <stdlib.h> #define MaxSize 50 typedef struct { int data[MaxSize]; int length; }SqList; void ListInsert(SqList *L,int i,int e) { int j; if(i<1||i>L->length+1) exit(-1); if(L->len

习题2.5 两个有序链表序列的合并(15 分)&lt;有疑问?L1 L2 没办法变空&gt;

习题2.5 两个有序链表序列的合并(15 分) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode L

习题2.5 两个有序链表序列的合并 (15分)

本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列. 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ L1和L2

单链表的头插、尾插、删除、合并等操作

单链表的头插.尾插.删除.合并等操作实现代码如下: #include<iostream> using namespace std; //单链表的存储结构 typedef struct Node { int data; struct Node* next; }Node,*LinkList;//LinkList为结构指针类型 //初始化单链表 void InitList(LinkList *L) { *L = (LinkList)malloc(sizeof(Node));//建立头结点 (*L)-

将两个有序链表合并成一个有序链表

问题定义: 写一个函数SortedMerge函数,该函数有两个参数,都是递增的链表,函数的功能就是合并这两个递增的链表为一个递增的链表,SortedMerge的返回值是新的链表.新链表由前两个链表按元素递增顺序合并而成,也就是说它不会创建新的元素. 比如:这里有两个链表,分别是 list1: 5->10->15 list2: 2->3->20 SortedMerge函数返回一个指向新链表的指针,新链表应该是如下这样的:2->3->5->10->15->

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和. 您可以假设除了数字 0 之外,这两个数都不会以 0 开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807 来源:力扣(LeetCode)链接:https://leetcode-c