有序链表合并

有序A={1,7,8}

有序B={2,4,6,8,10,11}

求A+B?

void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc)
{
    pa=La->next;
	pb=Lb->next;
	pc=Lc=La;	//用La的头结点作为Lc的头结点
	while(pa&&pb)
	{
		if(pa->data<pb->data)
		{
			pc->next=pa;
			pc=pc->next;
			pa=pa->next;

		}
		else
		{
			pc->next=pb;
			pc=pc->next;
			pb=pb->next;
		}
	}
	pc->next=pa?pa:pb;	//插入剩余段
	delete Lb;	//释放Lb的头结点
}
时间: 2024-08-04 09:40:31

有序链表合并的相关文章

将两个有序链表合并

题目:已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序.(保留所有结点,即便大小相同) 循环实现: 1.重新申请一个头结点,使用指针p指向他,每新加一个结点,就将指针p后移一位,即指针p永远指向新链表的尾结点 2.由于所用链表第一个结点不赋值,因此指针需要开始从头结点的下一个结点开始判断,如果两个指针都为非空,将data域较小的指针连在新链表的末尾 3.当两个指针有一个到达链表的结尾时,将没有到达末尾的链表连接到新链表之后 递归实现: 1.函数返回条件是有一个链表结

有序链表合并C语言递归版--我稍微会一点编程

假期最后一天,闲着没事编个程,天天吆喝自己不会编程,其实还是稍微会一点的. ??以下是一个有序链表合并的代码,一刻钟内盲写,花了10分钟左右调试通过,通篇只有一个if语句作为递归退出条件! #include <stdio.h> #include <stdlib.h> int a[] = {1,3,5,7,8,10,11,12,15,19,21,22,24,25,26}; int b[] = {2,4,5,6,9,16,17,18,27,30,31}; struct list { s

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

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

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

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinkedListTest { class Program { static void Main(string[] args) { LinkList<int> linkA = new LinkList<int>(); linkA.A

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

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

两个有序链表合并

1.两个链表都带有头结点 Node* Merge(Node* head1, Node* head2) { if(head1==NULL || head1->next==NULL) return head2; if(head2==NULL || head2->next==NULL) return head1; Node* p1=NULL; Node* p2=NULL; Node* head=NULL; //找出两个链表中第一个结点较小的结点,head记录较小结点的头结点 if(head1->

将两个有序链表合并,合并后仍然有序

思路:因为A,B链表中元素有序,要使归并后的C也有序,可以每次从A.B中挑出最小的元素插入C的尾部,这样循环插入完成后,C也一定是有序的. 1 struct LinkList{ 2 int data; 3 LinkList *next; 4 } 5 6 void Merge(LinkList *A,LinkList *B,LinkList *&C) 7 { 8 LinkList *p = A->next; // 定义p结点跟踪 A中的结点 9 LinkList *q = B->next

将两个有序链表合并为一个新链表

#include <iostream> #include <stdio.h> typedef struct _Node { int value; struct _Node *next; }Node; Node *MergeList(Node *listA, Node *listB); void PrintList(Node *head); int main() { Node lista, nodea, listb, nodeb, nodec; lista.value = 2; no

合并两个有序链表,合并后依然有序

PLinkList Merge(PLinkList pList1, PLinkList pList2) { PLinkList pList; PLinkList end; if (pList1 == NULL) { return pList2; } if (pList2 == NULL) { return pList1; } if (pList1 == pList2) { return pList1; } // 摘一个节点做为新头节点 if (pList1->data < pList2->