Java链表操作代码
/**
*
*/
package com.cherish.SwordRefersToOffer; /**
* @author acer
*
*/
public class test_22链表中倒数第k个节点 { /**
*
*/
public test_22链表中倒数第k个节点() {
// TODO 自动生成的构造函数存根
} public static class ListNode{
private int val;
ListNode next = null;
ListNode(int val){
this.val = val;
next = null;
}
} /**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
ListNode head = new ListNode(1);
//给一个链表赋值
for(int i = 2;i<10;i++) {
insertNodeFromTail(head,new ListNode(i));
}
printListNode(head);
System.out.println(FindKthToTail(head,4).val);
System.out.println(listNodeLength(head));
System.out.println(deleteFromIndex(head,4));
printListNode(head);
System.out.println(listNodeLength(head));
System.out.println(FindKthToTail(head,4).val); } //找到倒数第k个节点
public static ListNode FindKthToTail(ListNode head,int k) {
if(head == null||k <= 0) {
return null;
}
ListNode p1 = head;
ListNode p2 = head;
for(int i = 1;i<k;i++) {
if(p1.next != null) {
p1 = p1.next;
}else {
return null;
}
}
while(p1.next != null) {
p1 = p1.next;
p2 = p2.next;
}
return p2;
} //从头部插入新节点
public static void insertNodeFromHead(ListNode head,ListNode newNode)
{
newNode.next = head;
head = newNode;
} //从尾部插入新节点
public static void insertNodeFromTail(ListNode head,ListNode newNode)
{
if(head == null) {
head = newNode;
return;
}
ListNode temp = head;//用temp代替head去遍历找到最后一个节点,一定不要用head自己去遍历,不然就找不到链表头了
while(temp.next != null) { //下一节点不为空
temp = temp.next;
}
temp.next = newNode;//找到最后一个节点后把新节点插入进去
} //计算链表的长度
public static int listNodeLength(ListNode head) {
if(head ==null) {
return 0;
}
ListNode temp = head;
int length = 0;
while(temp.next != null) {
length++;
temp = temp.next;
}
return length;
} //从特定位置删除链表
public static boolean deleteFromIndex(ListNode head,int deleteIndex)
{
if(head == null || deleteIndex<1) {
return false;
}
if(deleteIndex == 1) {
head = head.next;
return true;
}
int index = 1;
ListNode temp = head;
ListNode deleteNode;
while(temp.next != null && index < deleteIndex) {
index++;
temp = temp.next;
}
deleteNode = temp.next;
temp.next = deleteNode.next;
return true;
} //按顺序输出链表
public static void printListNode(ListNode head)
{
ListNode temp = head;
while(temp.next != null)
{
System.out.print(temp.val);
System.out.print("\t");
temp = temp.next;
}
System.out.println();
} }
Java链表操作代码的更多相关文章
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- HDFS的Java客户端操作代码(HDFS的查看、创建)
1.HDFS的put上传文件操作的java代码: package Hdfs; import java.io.FileInputStream; import java.io.FileNotFoundEx ...
- JAVA 链表操作:单链表和双链表
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
- 【Java】Java CSV操作代码
CSV是逗号分隔文件(Comma Separated Values)的首字母英文缩写,是一种用来存储数据的纯文本格式,通常用于电子表格或数据库软件.在 CSV文件中,数据“栏”以逗号分隔,可允许程序通 ...
- HDFS的java客户端操作代码(Windows上面打jar包,提交至linux运行)
1.通过java.net.URL实现屏幕显示demo1文件的内容 package Hdfs; import java.io.InputStream; import java.net.URL; impo ...
- HDFS的Java客户端操作代码(HDFS删除文件或目录)
1.HDFS删除文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.hadoo ...
- HDFS的Java客户端操作代码(查看HDFS下所有的文件存储位置信息)
1.查看HDFS下所有的文件存储位置信息 package Hdfs; import java.net.URI; import org.apache.hadoop.conf.Configuration; ...
- HDFS的Java客户端操作代码(查看HDFS下所有的文件或目录)
1.查看HDFS下所有的文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.h ...
- HDFS的Java客户端操作代码(查看HDFS下的文件是否存在)
1.查看HDFS目录下得文件是否存在 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache. ...
随机推荐
- linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间
转自:https://blog.csdn.net/qq_17019203/article/details/85051627 问题:open(2)函数打开文件是否将文件内容加载到内存空间 首先,文件打开 ...
- 【IOS】libimobiledevice常用命令
libimobiledevice 是一个跨平台的软件库,支持 iPhone®, iPod Touch®, iPad® and Apple TV® 等设备的通讯协议. 安装 命令: brew ins ...
- 为 Jupyter Notebook指定虚拟环境的 Python 解释器
说明:本机系统为 win10 64 位, base 是集成于 Anaconda3 的 64 位的python,以下是创建虚拟环境 py366-32,安装 3.6.6 版的 32 为python,把 3 ...
- win10台式机rtl8188eu(FW 150 UM V2.0)无线网卡无法连接wifi(无法连接到这个网络)
同一个网卡,同一个WiFi,在笔记本上能用,能连接wifi,但是在台式机上就不能连接wifi,提示“无法连接到这个网络”,如下图. win10版本都是1903.尝试换各种驱动都没解决. 最后更新主板b ...
- Logstash 学习资料
学习资料 网址 Logstash Reference(官方) https://www.elastic.co/guide/en/logstash/current/introduction.html
- js检测手机类型(android,ios,blackberry,windows等)
var isMobile = { Android: function() { return navigator.userAgent.match(/Android/i); }, BlackBerry: ...
- JDBC连接池的九种查询
package JDBC_Demo; import java.sql.SQLException; import java.util.List; import java.util.Map; import ...
- VSS 使用方法
VSS 的全称为 Visual Source Safe .作为 Microsoft Visual Studio 的一名成员,它主要任务就是负责项目文件的管理,几乎可以适用任何软件项目.管理软件开发中各 ...
- Spring Cloud微服务安全实战_3-4_API安全机制之认证
认证:登录和认证是 两个概念,比如你两周.一个月,可能只登录了一次,但认证却是每次访问都要经过的步骤. 对于图中的认证不成功,也要继续处理,这个我觉得得看业务,比如管理系统,不登录就不让你访问,但对 ...
- vue之子父组件通信
一. 子-父组件间通信: let children = { # 定义子组件 template: `<div> <button @click="send"&g ...