本篇有单链表的:头插法,尾插法,输出,链表长度的输出,查看链表中是否存在某个值,指定位置插入(值,位置),指定位置删除。 (看注释)
后加,找链表中间值,判断链表是否成环,找出成环位置,链表翻转,截取单链表后 k 个节点。请走链接:
Java 单链表的几个功能实现 -2-篇_阿A轲的博客-CSDN博客
链表:地址不连续存储 (磁盘)
单链表:
定义链表:
(看注释)
public class Node {
Integer val;//定义节点
Node next;//保存下一个节点地址,需要类型与类名保持一致,才能记录下一个节点地址。
public Node(Integer val) {
this.val=val;
}
}
//创建链表管理类 方便实现链表增删改查 等操作
public class LInkList {
//定义链表 头节点
Node head =null; //Node 类型 能定义头节点位置
//尾插法 链表尾部插入数据
public void insert(int val) {
//创建节点
Node node=new Node(val);
// 判断头记录是否为空
if(head==null) {
head=node;
return;
}
//定义指针
Node indexNode =head;
//从头进行遍历
while(indexNode.next!=null) {
indexNode =indexNode.next;
}
indexNode.next=node;
}
//头插法
public void HeadInsert(int val) {
Node node=new Node(val);
if(head==null) {
head=node;
return;
}
node.next=head;
head=node;
}
//输出一下
public void Printlink() {
Node indexNode=head;
while(indexNode!=null) {
System.out.println(indexNode.val);
indexNode=indexNode.next;
}
}
//输出链表长度
public int GetLength() {
int length=0;
Node indexNode=head;
while(indexNode!=null) {
length++;
indexNode=indexNode.next;
}
return length;
}
//查询某个值是否在链表中
public boolean contains(int val) {
Node indexNode=head;
while(indexNode!=null) {
if(indexNode.val==val) {
return true;
}
indexNode=indexNode.next;
}
return false;
}
//指定地方插入,(值,位置)
public void addNodeAtIndex(int val,int index) {
if(index==0) {
HeadInsert(val);
}else if(index==GetLength()) {
insert(val);
}else {
//中间某位置插入
//1新建插入节点
Node node=new Node(val);
//2 定义游标遍历链表
Node indexNode=head;
Node tempNode=null;
int position=0;
while(indexNode!=null) {
if(position==index) {
node.next=indexNode;
tempNode.next=node;
return;
}
tempNode=indexNode;
indexNode=indexNode.next;
position++;
}
}
}
//指定位置删除
public void delete(int index) {
//首先判断index的合法性
if (index<0 || index > GetLength()) {
throw new IndexOutOfBoundsException("index 不合法");
}
//如何删除的是头部,那么栈内存直接指向一下个就好了
if(index == 0) {
head = head.next;
return;
}
//定义一个节点指向该链表、
Node tempListNode = head;
Node pre = null; //记录前置结点
//找到相关的位置
int position =0;
while(tempListNode != null) {
//如果位置正确那么就定下来.进行交换
if (position == index) {
pre.next = tempListNode.next;
tempListNode.next = null;
return;
}
pre = tempListNode;
tempListNode = tempListNode.next;
position ++ ;
}
}
}
自己写main方法测吧。。。