java链表listnode是线程安全的吗_两个升序链表合并为一个升序链表

java链表listnode是线程安全的吗_两个升序链表合并为一个升序链表/***描述:删除链表中等于给定值val的所有节点。样例:给出链表1->2->3->3->4->5->3,和val=3,你需要返回删除3之后的链表:1->2->4->5。分析:1.首先判断head是不是空,为空就直接返回null2.然后从head.next开始循环遍历,删除相等于val的元素3.最后判断head是否和val相等,若相等,head=head.next

大家好,又见面了,我是你们的朋友全栈君。

/**

  • 描述:

删除链表中等于给定值val的所有节点。
不使用java api LinkedList、ArrayList实现

样例:

给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。

分析:

1.首先判断head是不是空,为空就直接返回null
2.然后从head.next开始循环遍历,删除相等于val的元素
3.最后判断head是否和val相等,若相等,head = head.next
(这里最后判断head是有原因的,因为head只是一个节点,只要判断一次,如果最先判断head就比较麻烦,因为如果等于val,head就要发生变化)
这里也体现出为什么设计链表的时候要空出一个头结点

*/

package leetcode;

class ListNode{
	int val;
	ListNode nextNode;
	ListNode(int val){
		this.val=val;
		this.nextNode=null;
	}
}
public class n2deletelistnode {

	static ListNode  head=null;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] input=new int[]{1,2,3,3,4,4,5};
		ListNode listNode=buildListNode(input);
		head=listNode;
		while(listNode!=null){
			System.out.println("val"+listNode.val+"/listNode"+listNode.nextNode);
			listNode=listNode.nextNode;
		}
		head=removeElements(head,3);
		listNode=head;
		while(listNode!=null){
			System.out.println("val"+listNode.val+"/listNode"+listNode.nextNode);
			listNode=listNode.nextNode;
		}

	}
	private static ListNode buildListNode(int[] input){
		ListNode first = null,last = null,newNode;
		int num;
		if(input.length>0){
			for(int i=0;i<input.length;i++){
				newNode=new ListNode(input[i]);
				newNode.nextNode=null;
				if(first==null){
					first=newNode;
					last=newNode;
				}
				else{
					last.nextNode=newNode;
					last=newNode;
				}
				
			}
		}
		return first;
	}
	private static ListNode removeElements(ListNode head,int val){
		if(head==null){
			return null;
		}
		ListNode p=head,q=head.nextNode;
		while(q!=null){
			if(q.val==val){
				p.nextNode=q.nextNode;
				q=q.nextNode;
			}else{
				p=p.nextNode;
				q=q.nextNode;
			}
		}
		if(head.val==val){
			return head.nextNode;
		}
		return head;
		
	}

}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/125313.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • js匹配换行符

    js匹配换行符letstr=str.replace(/\n/g,'<br/>’)持续更新前端知识

  • 怎么将pdf转换成image_php从入门到精通 pdf

    怎么将pdf转换成image_php从入门到精通 pdf上次找到fpdf发现文档支持不足。而且含有php5.4不能用了的过期函数,图片进去也显示不了等问题。特意找到这个tcpdf。下载的地址搞一个试试中文字体包下载%20Sans%20Fallback%20-%20PHP.zip/download下载后,将它解压放在droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文…

  • ViewStub和Gone区别[通俗易懂]

    ViewStub和Gone区别[通俗易懂]虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。   推荐的做法是使用android.view.ViewStub,ViewStub是一个轻量级的View,它一个看不见的,不占布局位置,占用资源非常小的控件。可以为ViewStub指定一个布局,在Infl

  • Navicat for Mysql连接数据库时遇到10038错误

    Navicat for Mysql连接数据库时遇到10038错误使用Navicat for MySQl访问mysql数据库,出现报错,显示“2003- Cant connect MySQL Server on localhost(10038)“。原因:3306端口未对外开放。解决方案: 方法一:我的电脑右键—&gt;管理—&gt;服务和应用程序—&gt;服务—&gt;在里面找到Mysql—&gt;右键启动…

  • stm32l476芯片介绍(nvidia驱动无法找到兼容的图形硬件)

    前言最近购买了IoTBoard潘多拉开发板来研究,学习使用STM32CubeMX工具配置SPI,然后驱动了TFTLCD。潘多拉开发板的TFTLCD驱动IC是ST7789V2,结合原子哥的TFTLCD代码,分享自己的硬件SPI+软件SPI驱动ST7789V2+中文显示。关于STM32CubeMX的使用可以参考微雪课堂STM32CubeMX系列教程。STM32L475硬件SPI+软…

  • 平面图上的欧拉公式

    平面图上的欧拉公式V-E+F=2,V、E、F表示顶点数、边数、面数。

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号