两个链表合并不加入新的链表空间

class LNode {
	int value;
	LNode next;

	public LNode(int value, LNode next) {
		this.value = value;
		this.next = next;
	}

}

public class MergeTowList {

	public static void main(String[] args) {
		LNode A5 = new LNode(21, null);
		LNode A4 = new LNode(13, A5);
		LNode A3 = new LNode(10, A4);
		LNode A2 = new LNode(6, A3);
		LNode A1 = new LNode(3, A2);

		LNode B4 = new LNode(14, null);
		LNode B3 = new LNode(12, B4);
		LNode B2 = new LNode(6, B3);
		LNode B1 = new LNode(4, B2);

		LNode merge = mergeLinks(A1, B1);
		System.out.println(123123);
		while (merge != null) {
			if (merge.next != null) {
				System.out.print(merge.value + ",");
			} else {
				System.out.print(merge.value);
			}

			merge = merge.next;
		}

	}

	public static LNode mergeLinks(LNode head1,LNode head2){
		if(head1==null){
			return head2;
		}
		if(head2==null){
			return head1;
		}
		LNode head;
		if(head1.value>head2.value){
			head = head2;
			head2=head2.next;
		}else{
			head = head1;
			head1=head1.next;
		}
		LNode current=head;//current指向新的链表的最后一个节点
		while(head1!=null && head2!=null){
			if(head1.value>head2.value){
				current.next=head2;
				current=head2;
				head2=head2.next;
			}else{
				current.next=head1;
				current = head1;
				head1=head1.next;
			}
		}
		if(head1!=null){//把listA的全部插入到current后面
			current.next=head1;
		}
		if(head2!=null){
			current.next=head2;
		}

		return head;

	}

}
时间: 2024-11-03 05:39:53

两个链表合并不加入新的链表空间的相关文章

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

1 /*将两个递增单链表合并成一个递减单链表*/ 2 /* 3 算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将较小的 4 结点链入链表中,同时后移工作指针.由于结果链表是递减的,故使用头插法建立新链表.比较结束后, 5 可能会有一个链表非空,此时用头插法将剩下的结点依次插入新链表中即可. 6 */ 7 void Union_List(LinkList& La,LinkList& Lb) 8 { 9 LNode *r, *pa = La->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

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

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

单链表 --- 合并两个单链表

合并单链表 --> 一.解决方法: 确保两个单链表不为空,且二者皆有序(若无序,则先进行排序) 创建新的单链表,并比较原本两个单链表数据大小,较小者置于新单链表中 逐步将两个单链表的数据置于新单链表中,直至二者为空 二.程序代码: ListNode* MergeList(ListNode *L1,ListNode *L2)//合并两个单链表 { ListNode *newHead=NULL; ListNode *tail=NULL; if(L1==NULL) { return L2; } if(

链表--合并两个有序链表

leetcode 21 将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 还是采用递归的方法,先贴出代码: public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if( l1 == null ) { return l2; } if( l2 == null ) {

链表专题——面试中常见的链表问题

声明:链表定义如下: //Java: class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } //C++: typedef struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }ListNode; ? 从无头单链表中删除节点 详情:给定一个没有头指针

将两个有序链表合并

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

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

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