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. ...
随机推荐
- SSISWMI-Watching for the Wql query caused the following system exception: "Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"
将带有WMI WATCH TASK的SSIS包排到sql server agent跑,报异常,这是运行账号权限的问题. Executed as user: sss. Microsoft (R) ...
- OpenSSL生成私钥和公钥
1.生成私钥 -- 生成 RSA 私钥(传统格式的) openssl genrsa -out rsa_private_key.pem 1024 -- 将传统格式的私钥转换成 PKCS#8 格式的(JA ...
- Java单例模式的几种实现
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10845530.html 一:静态内部类实现单例模式 原理:通过一个静态内部类定义一个静态变量来持有当前类实例 ...
- Linux计划任务管理
计划任务 类型: 一次性计划任务 周期性计划任务 一次性计划任务 前提: atd服务必须运行 [root@wei init.d]# yum -y install at ...
- Ubuntu 16.04.6 + Win10 双系统时间错误且不一致
1.在Win系统下,按Win键 + R,输入regedit 运行, 2.打开注册表,按照路径查找 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet ...
- nfs—文件转换器
前端时间,在做一次设备升级时对nfs有了新的认识. nfs一般认为是文件共享服务器,但在实际的工作环境中,业务服务器有诸多限制,需要有加密隔离措施等等,版本升级和功能调试不同于平时的实验环境. 特别好 ...
- C#使用Xamarin开发移动应用 ---- 系列文章
C#使用Xamarin开发移动应用 C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.) C#使用Xamarin开发可移植移动应用进阶篇(10.综合演练, ...
- 09-cmake语法-add_dependencies()
在编译器的命令行上,为当前路径以及下层路径的源文件加入一些define flag.这个命令可以用来引入任何flag,但是它的原意是用来引入预处理器的定义.那些以-D或/D开头的.看起来像预处理器定义的 ...
- getElementsByName兼容ie 但并不是兼容ie下的所有标签
document.getElementsByName('someName') 返回一个节点列表(数组) document.getElementById('id') 返回一个节点或者null 注意在IE ...
- Linux 安装Docker compose 快速方法
https://blog.csdn.net/ysk_xh_521/article/details/80443509 安装pipyum -y install epel-releaseyum -y ins ...