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. ...
随机推荐
- MySQL数据库(五)--用户管理、pymysql模块
一.用户管理(权限管理) 在MySQL中自带的mysql数据库中有4个表用于用户管理的 # 优先级从高到低 user > db > tables_priv > columns_pri ...
- Linux下virtualenv与virtualenvwrapper详解
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...
- Linux下BLAST+的本地化(BLAST 2.2.29+)
链接:http://blog.sciencenet.cn/home.php?mod=space&uid=830496&do=blog&quickforward=1&id ...
- 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
原文:https://mp.weixin.qq.com/s/lpsQ3dEZHma9H0V_mcxuTw 一.资料文档 二.开发语言 三.支持的协议 四.消息存储 五.消息事务 六.负载均衡 七.集群 ...
- django rest framework 解析器组件 接口设计,视图组件 (2)
1. 使用视图组件进行接口优化 1.1 使用视图组件的mixin进行接口逻辑优化 - 导入mixin from rest_framework.mixinx import ( ListModelMix, ...
- LCD编程框架组织
看下面的代码,你会发现韦老师这种组织与内核框架的组织是一脉相承的. led.c #define LCD_NUM 10 static p_lcd_params p_array_lcd[LCD_NUM]; ...
- excel隔行选中内容如何操作
查看log日志是站长经常要做的事,从日志中可以发现很多问题,spider最近有没来爬,爬了哪些url,哪些页面不存在了等等,这些都可以看得到.然后你要根据不同的情况采取相应的措施.ytkah喜欢把这些 ...
- 常用dos命令(4)
系统管理at 安排在特定日期和时间运行命令和程序shutdown立即或定时关机或重启taskkill结束进程(WinXPHome版中无该命令)tasklist显示进程列表(Windows XP Hom ...
- vue大文件上传控件选哪个好?
需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...
- shell 字符串拼接
#!/bin/bash name="Shell" url="http://c.biancheng.net/shell/" str1=$name$url #中间不 ...