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

Posted 鹏鹏进阶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两个链表合并不加入新的链表空间相关的知识,希望对你有一定的参考价值。

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;
		
	}

}

 

以上是关于两个链表合并不加入新的链表空间的主要内容,如果未能解决你的问题,请参考以下文章

合并两个有序的链表使新链表依然有序(不开辟新空间,在原链表上操作。 递归版本)

链表 | 将递增有序的两个链表的公共元素合并为新的链表

合并两个排序的链表使之依然有序(不开辟新空间在原链表上操作的非递归版本)

剑指Offer-16.合并两个排序的链表(C++/Java)

剑指offer:合并两个排序的链表

LeetCode 21.合并两个有序链表