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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • DirectX修复工具的详细使用步骤介绍[通俗易懂]

    DirectX修复工具的详细使用步骤介绍[通俗易懂]DirectX修复工具的详细使用步骤介绍@TOCDirectX修复工具是一款系统级工具软件,简便易用,无需安装,可直接运行,下面为大家分享的是DirectX修复工具的详细使用步骤介绍首先我们下载DirectX修复工具,再找到并打开“维护电脑”,在找到并打开“恢复软件”,再点“DirectX修复工具”2.这时候解压之后,这里有两个DirectXRepair.exe修复工具,另一个Direc…

    2022年6月10日
    45
  • Maven环境配置及IntelliJ IDEA中的Maven部署

    Maven环境配置及IntelliJ IDEA中的Maven部署小编简介

    2022年5月14日
    71
  • 记一次不在状态的大疆面试

    记一次不在状态的大疆面试之前写博客也有不少,但一直没有一个固定的地方,csdn,博客园,eoe,oschina都写过一些,但没有长期固定的去记录,自己开的博客站也因为忘记续费而被停掉,数据也丢了…希望在简书能坚持记录一些技术上的东西,刚好昨天在大疆面试完,就以大疆作为简书博客的开端吧11月初有前同事内推大疆Android开发的机会,就发了一份简历过去试试。大概一个星期,收到了…

    2022年6月22日
    32
  • JavaScript对象:我们真的需要模拟类吗?

    JavaScript对象:我们真的需要模拟类吗?

    2021年7月1日
    79
  • haproxy+keepalived实现高可用负载均衡

    haproxy+keepalived实现高可用负载均衡

    2021年9月7日
    62
  • 云服务器搭建青龙面板每日自动拿京豆

    云服务器搭建青龙面板每日自动拿京豆前言:之前网上有只要扫码一下就可以每天领上百京豆和一些红包的活动,后来呢,扫码就失效了,但是呢,这背后的技术还没有失效。这白嫖活动其实就是用脚本代替我们去参与京东的各种活动,去获取红包和京豆,而这些脚本是部署在电脑上,定时去执行的,接下来,根据网上的大佬的教程,我们也来实现一下。每天100-200京豆不等,坐收渔利,快来试试吧。一、安装前的准备​青龙面板是使用Docker来安装的,理论上,只要有可以运行Docker的电脑都可以进行安装。但是呢,因为脚本要定时运行,所以最好安装在服务器上,或

    2022年10月14日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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