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)


相关推荐

  • linux 卸载cuda_如何卸载CUDA

    linux 卸载cuda_如何卸载CUDALinux下cuda卸载亲测好用#1.用runfile方式安装的删除方法:sudo/usr/local/cuda-8.0/bin/uninstall_cuda_8.0.pl#2.用packagemanager方式安装的删除方法:sudoapt-get–purgeremovecuda-8.0sudoaptautoremovesudoapt-getautoclean#cudnn文件和samples残留在/usr/local/cuda-8.0/,删除

  • 【Unity3D插件】Unity3D各类教程汇总「建议收藏」

    推荐阅读CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875一、工具篇工欲善其事,必先利其器学习Unity3D不从工具篇说起怎么能行?学习Unity3D最重要的两个工具:Unity3D和VisualStudio(VisualStudioCode也行)1-1、Unity3D安装Unity安装个人免费版步骤详解(通过UnityHub安装unity,是比较流行的安装方式)https://blog.csdn.net/fi.

  • excel查找结果导出_excel数据怎么导出

    excel查找结果导出_excel数据怎么导出使用PhpSpreadsheet导入&amp;amp;导出Excel,通用方法。适用各种Excel操作场景!

  • chrome调试appweb_调试应用是什么意思

    chrome调试appweb_调试应用是什么意思googleDevice使用

    2022年10月26日
  • pycharm配置文件路径_pycharm添加解释器

    pycharm配置文件路径_pycharm添加解释器搭建Python环境1.下载安装python首先进入python官网https://www.python.org/2.点击windows3.如图所示,点击python3.8.34.在下载页面选择如图所示的下载安装包5.下载完之后,开始安装,按下图所示勾选,然后进入用户设置页面customizeinstallation6.按照图示勾选,然后next7.勾选installforalluse…

  • 二叉树(前序、中序、后序遍历图片步骤详解)

    二叉树(前序、中序、后序遍历图片步骤详解)首先我们有这么一颗二叉树:前序遍历:根结点—>左子树—>右子树这棵树的前序遍历为:ABDEGHCF中序遍历:左子树—>根结点—>右子树这棵树的前序遍历为:DBGEHACF后序遍历:左子树—>右子树—>根结点这棵树的前序遍历为:DGHEBFCA层次遍历:按层次遍历这棵树的前序遍历为:ABCDEF…

发表回复

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

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