`

根据有序表L2表的值删除L1表的节点

阅读更多
原题:根据有序表L2的值删除链表L1的节点。比如:L1 = {A,B,C,D,E,F}, L2={1,2,3,10}

那么删除之后L1={A,E,F},因为节点10不存在


下面是节点类(也为了其他测试的用途,实现了一个copy接口)

public class Node implements Cloneable {
	public String value;
	public Node next;
	
	public Node(String value, Node next) {
		this.value = value;
		this.next = next;
	}
	
	
	@Override  
    public Object clone() throws CloneNotSupportedException {   
        return super.clone();   
    } 
}



下面是主函数方法~

其中L2我采用了一个数组来存储

public class MinusList {
	public static void main(String[] args) {
		Node a0 = new Node("a0",null);
		Node a1 = new Node("a1",null);
		Node a2 = new Node("a2",null);
		Node a3 = new Node("a3",null);
		Node a4 = new Node("a4",null);
		Node a5 = new Node("a5",null);
		Node a6 = new Node("a6",null);
		
		a0.next = a1;
		a1.next = a2;
		a2.next = a3;
		a3.next = a4;
		a4.next = a5;
		a5.next = a6;
		
		int[] array = {2,4,8};
		
		Node head = a0;
		Node t = head;
		Node t2;
		for(int i=0; i < array.length; i++) {
			int steps = array[i];
			if(i != 0) {
				steps = array[i] - array[i-1];
			}
			for(; (steps > 1) && (t != null); steps--) {	//让t指向目标节点的上一个节点
				t = t.next;
			}
			if(t != null) {
				t2 = t.next;
				t.next = t.next.next;
				t2 = null;
			}
		}
		
		//print all nodes
		t = head;
		while(t != null) {
			System.out.print(t.value + " ");
			t = t.next;
		}
	}
}

分享到:
评论

相关推荐

    itcharge#LeetCode-Py#0021. 合并两个有序链表1

    创建一个新的链表节点作为头节点(记得保存),然后判断 l1 和 l2 头节点的值,将较小值的节点添加到新的链表中。然后继续判断当前 l1 节点和当前 l2 节点

    大一C++上机作业11.12周(链表类模板插入排序删除输出)

    设计一个通用链表类模板,可支持在链头插入元素、在链尾插入元素、将元素插入有序链的适当位置使链表保持升序、查找链表中第一个关键字节点(链表中可能有多个相同值的节点,找到其中第一个出现的节点)、删除链表中...

    fantj2016#java-reader#LeetCode--21. 合并两个有序链表(Java)1

    * 如果l1和l2都不为空,则一直循环取值比较//如果l1比l2小,将l1赋值给listNode的下一个节点,l1指针下移* 如果一个链表空了,则将另一个链表复

    Python实现合并两个有序链表的方法示例

    本文实例讲述了Python实现合并两个有序链表的方法。分享给大家供大家参考,具体如下: 思路:先选出第一个节点,然后遍历两个链表,把小的作为当前节点的下一个节点,一直到其中一... def mergeTwoLists(self, l1, l2

    python实现合并两个排序的链表

    剑指offer:合并两个排序的链表,Python实现 题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表...找到两个链表中头节点值相对更小的链表,将其作为主链表,第二个链表中的元素

    21. 合并两个有序链表

    因为每次循环迭代中,l1 和 l2 只有一个元素会被放进合并链表中, 因此 while 循环的次数不会超过两个链表的长度之和。所有其他操作的时间复杂度都是常数级别的,因此总的时间复杂度为 O(n+m)。 空间复杂度:O(1) 。...

    数据结构

    L1节点【1】和L2节点【1】比较完成后,需要修改1.next指针,以指向它的下个节点。 第二步: 现在我们获取到了L2链表【1】,那它的next指向谁?也就是L2链表【1】去和L1链表的【2】进行比较。 比较完成后,L2链表【1...

    力扣 P21 合并两个有序列表

    合并两个有序列表 题目 将两个有序链表合并为一个...先判断L1,L2是否为空,接下来通过循环来将两个列表中的元素按从小到大进行合并,最后返回的列表即为所求得的合并的列表。 代码实现 运行结果 这个方法思路简单,

    leetcode答案-leetcode:leetcode

    删除倒数第N个节点。 链表是否有环 双指针 L11 成最多水的容器。167. 两数之和 II - 输入有序数组。 L977有序数组的平方 3 回溯算法 L79 单词搜索:再字母矩阵中搜索单词 L39 组合求和 L46 全排列 4 数组 L566...

    数据结构(C++)有关练习题

    E. *整理函数tideup:在非递减有序的单链表中删除值相同的多余结点。 实验报告要求: 按要求写出完整的实验代码; &lt;br&gt;实验三 堆栈结构与递归 实验目的: 通过实验掌握下列知识: 1、掌握堆栈...

Global site tag (gtag.js) - Google Analytics