俩个递增有序单链表的合并算法(含头结点)

void  merge(LNode *A,LNode *B,LNode *&C)    //此处C指针为引用型

{

LNode *p=A->next;

LNode  *q=B->next;

LNode  *r;     //r是尾指针

C=A;

C->next=NULL;

r=C;

free(B);       //释放B的头结点

While(p!=NULL&&q!=NULL)

{

if(p->data<=q->data)

{

r->next=p;

p->next=p;

r->next=r;

}

else

{

r->next=q;

q->next=q;

r->next=r;

}

if(p!=NULL)

r->next=p;

if(q!=NULL)

r->next=q;

}

}

原文地址:https://www.cnblogs.com/cxydnxs/p/11559468.html

时间: 2024-08-05 22:37:02

俩个递增有序单链表的合并算法(含头结点)的相关文章

两个有序单链表的合并

已知两个单链表pHead1 和pHead2 各自有序,把它们合并成一个链表依然有序这个类似归并排序.尤其注意两个链表都为空,和其中一个为空时的情况.只需要O(1)的空间.时间复杂度为O(max(len1, len2)) 1 public static Node mergeSortedList(Node head1, Node head2) { 2 // 其中一个链表为空的情况,直接返回另一个链表头,O(1) 3 if (head1 == null) { 4 return head2; 5 } 6

链表 | 去除递增有序单链表中的重复元素

王道P37T12 主代码: void delete_common(LinkList& L){ LNode* pre=L,*p=L->next; while(p!=NULL){ LNode* r=p->next; while(r!=NULL && p->data==r->data){ pre->next=r; LNode* del=p; p=r; delete del; r=r->next; } pre=p; p=p->next; } } 完

单链表尾插法,头结点作为结点个数进行计数

#include <stdio.h>#include <stdlib.h>#include <string.h> struct node{    int data;    struct node *pNext;}; void insertTail(struct node *pH,struct node *new){    struct node *p=pH;    int counter=0;        while(NULL != p->pNext)    {

单链表的创建算法

单链表的创建算法 当一个序列中只含有指向它的后继结点的链接时,就称该链表为单链表. 单链表的示意图如下: Head指针为单链表的头指针,单链表L:L既是单链表的名字,也是其头指针.链表中的最后一个结点的指针域定义为空指针(NULL). 单链表的定义: struct Node { ElemType data; struct Node *next; }; typedef struct Node LNode; typedef struct Node *LinkedList; 单链表有带头结点和不带头结

合并两个有序的单链表,合并之后的链表依然有序【出现频率高】

合并两个有序的单链表,合并之后的链表依然有序: 这道题经常被各公司考察. 例如: 链表1:   1->2->3->4 链表2:   2->3->4->5 合并后:   1->2->2->3->3->4->4->5 解题思路:   挨着比较链表1和链表2.   这个类似于归并排序.尤其要注意两个链表都为空.和其中一个为空的情况.只需要O (1) 的空间.时间复杂度为O (max(len1,len2)) public Node me

合并两个有序单链表

给出两个有序的单链表,将这两个单链表进行合并,合并出来的链表仍然是有序的. 比如给出链表1:1->3->6->7;链表2:2->4->5->8->9 合并后的链表为:1->2->3->4->5->6->7->8->9 代码展示如下(只给出实现部分) 结构体定义: typedef struct LinkNode { DataType data; struct LinkNode *next; }LinkNode,*pLi

Leetcode:Merge Two Sorted Lists 合并两个有序单链表

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists. 代码如下: * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x

合并两个有序单链表的操作

/*以合并两个2个长度均为n的递增单链表为例 演示连个单链表的合并操作*/ #include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<stdio.h>#include<queue>#include<math.h>#define INF 0x3f3f3f3f#define MAX 1000005#define Temp 100

链表习题(4)-有一个带头结点的单链表,编写算法使其元素递增有序

1 /*有一个带头结点的单链表,编写算法使其元素递增有序*/ 2 /* 3 算法思想:利用直接插入排序的思想,先构成只含有一个数据结点的有序单链表,然后依次插入 4 剩余结点到合适的位置. 5 */ 6 void Sort(LinkList& L) 7 { 8 LNode *p = L->next, *pre; 9 LNode *r = p->next; 10 p->next = NULL; 11 while (p) 12 { 13 r = p->next; 14 pre