`

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

 
阅读更多
思路一:新建一个头节点,将原来的两个链表的节点依次插入到新节点之后~
(也有其他的思路,比如不新建一个头节点,直接在原来的基础之上进行交换,但是感觉思路以及实现上面没有第一个思路来得清晰简单。 以后再实现吧~)

一个bug 如果两个链表中有一个为空时 此时会出错
解决思路: 就检测第一个链表。如果为空,则直接返回第二个链表。无论第二个是否为空都行。


这个是节点

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



以下是main()方法
public class ListMerge {
	public static void main(String[] args) {
		//Linked List Construction
		
		IntNode a1 = new IntNode(1, null);
		IntNode a2 = new IntNode(2, null);
		IntNode a3 = new IntNode(7, null);
		
		IntNode b1 = new IntNode(3, null);
		IntNode b2 = new IntNode(4, null);
		IntNode b3 = new IntNode(8, null);
		
		a1.next = a2;
		a2.next = a3;
		b1.next = b2;
		b2.next = b3;
		
		IntNode head1 = a1;
		IntNode head2 = b1;
		
		//temp variables
		IntNode t = null;
		
		//create new head
		IntNode head = null;
		if(head1.value < head2.value) {
			head = head1;
			head1 = head1.next;
		} else {
			head = head2;
			head2 = head2.next;
		}
		head.next = null;
		t = head;
		
		
		//merge into new linked list
		while( head1 != null && head2 != null ) {
			if(head1.value < head2.value) {
				t.next = head1;
				head1 = head1.next;
			} else {
				t.next = head2;
				head2 = head2.next;
			}
			t = t.next;
			t.next = null;
		}
		
		//merge left ones
		if(head1 != null) {
			t.next = head1;
		} else if(head2 != null){
			t.next = head2;
		}
		
		//free space
		head1 = null;
		head2 = null;
		
		//print all nodes
		t = head;
		while(t != null) {
			System.out.print(t.value + " ");
			t = t.next;
		}
	}
}


分享到:
评论

相关推荐

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

    将两个有序的链表合并为一个有序链表,链表的大小是可变的

    C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现

    ### C++ 版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现 在计算机科学中,链表是一种常见的数据结构,广泛应用于各种算法和数据处理任务中。本文将详细介绍如何使用C++语言来实现一个功能,即合并...

    实验二 单向链表的有关操作.cpp

    1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)...利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。

    将一个单向链表反向连接

    将一个单向链表反向连接

    何将两个有序链表并为一个有序链表

    何将两个有序链表并为一个有序链表。

    PTA 两个有序链表序列的合并

    由于链表是有序的,这意味着我们可以采用一种简单而有效的策略来合并它们:比较两个链表的头节点,选择较小的那个作为新链表的头节点,然后递归地处理剩余部分。 以下是一个详细的步骤来解决这个问题: 1. 定义一...

    将两个递增的链表合并为一个非递减的链表

    ### 题目解析:将两个递增的链表合并为一个非递减的链表 #### 一、问题背景与需求分析 本题目要求实现的功能是:输入两个递增的链表,然后通过程序对这两个链表进行排序(虽然在实际应用中,递增的链表已经有序,...

    单向链表实验报告(数据结构)

    6. 合并两个非递减有序链表:将两个已排序的链表合并为一个非递增有序链表。 7. 分解链表:将一个链表拆分为两个链表,一个包含所有奇数,另一个包含所有偶数,尽可能地利用原有的链表空间。 以下是实现这些操作的...

    单向链表 代码架构

    单向链表的每个节点包含两部分:数据和指向下一个节点的引用。 在给定的“单向链表 代码架构”中,我们可以期待找到以下几个关键知识点: 1. **链表节点结构**:通常,链表节点由数据域(用于存储数据)和指针域...

    如何将两个有序链表并为一个有序链表

    ### 如何将两个有序链表合并为一个有序链表 #### 背景与目标 在数据结构的学习中,链表是一种重要的线性结构之一,它由一系列节点组成,每个节点包含数据域和指向下一个节点的指针。有序链表是指链表中的元素按照...

    C#单向链表的实现

    单向链表是由一系列节点组成,每个节点包含两个部分:数据域和指针域。数据域存储实际的数据,而指针域则指向下一个节点的地址。与数组不同,链表中的元素并不在内存中连续存放,这使得链表在插入和删除操作上具有较...

    单向链表输入 遍历 及插入元素建立有序表

    根据给定的信息,本文将详细解释以下几个核心知识点:创建单向链表、遍历单向链表、在非递减有序链表中插入元素、逆置链表中的元素、合并两个非递减有序链表使其成为非递增有序链表以及如何将一个链表分解成两个链表...

    单向链表源代码

    单向链表由一系列节点组成,每个节点有两个部分:数据域,用于存储数据;指针域,存储指向下一个节点的引用。链表的头节点是链表的第一个元素,而尾节点的指针域为null,表示链表的结束。由于链表中的节点没有顺序...

    链表归并的操作,将两个链表合并成一个链表

    总结起来,链表归并是一种高效且灵活的方法,能够将两个已排序的链表合并成一个有序链表。通过理解链表的结构和操作,我们可以采用迭代或递归的方式实现这一操作,适用于多种编程语言和数据类型。在实际的编程练习和...

    两个有序链表,合成为一个有序链表

    两个有序链表,合成为一个有序链表。文档中为升序模式。如果有需要的朋友们可以参考下代码。时间复杂度m+n,空间复杂度为2(m+n)

    C语言自学链表,单向链表,双向链表,适合新手学习。

    - **插入节点**:在双向链表中插入节点需要同时更新前后两个节点的指针,以便形成一个完整的链。 - **删除节点**:与单向链表相似,但还需要处理待删除节点与前后节点之间的连接。 - **遍历链表**:双向链表可以...

    04.单向链表以及单向链表的应用.ppt

    04.单向链表以及单向链表的应用.ppt

    数据结构 单向链表 双向链表 源程序

    插入和删除操作在双向链表中也更为复杂,因为需要同时更新前后两个节点的指针。然而,由于这种双向性,某些操作(如查找某个节点的前一个或后一个节点)可能会更快。 源程序,通常是指用高级编程语言编写的未经过...

    C语言实现的一个单向链表逆转

    链表逆转是计算机科学中常见的操作,它将链表中的元素顺序颠倒,使得原链表的最后一个元素成为新链表的第一个元素,而原链表的第一个元素则成为新链表的最后一个元素。在面试中,这个问题常被用来测试候选人的逻辑...

    单向链表(一) 结构体、创建链表、遍历链表

    单向链表是一种基本的数据结构,它在计算机科学和编程中有着广泛的应用。与数组不同,链表中的元素不是在内存中连续存储的,而是通过指针连接起来。本篇文章将深入探讨单向链表的基本概念,包括其结构体定义、如何...

Global site tag (gtag.js) - Google Analytics