package com.yy.LinkedList;
public class LinkedList {
private Node head = new Node();//定义头结点,只指向下个节点的指针,不存放数据
/**
* 添加节点
* @param node
*/
public void addNode(Node node){
//获取头结点
Node temp = head;
//循环判断下一个节点是否已经存在节点了,如果有,则继续循环直到最后一个节点
while(temp.next != null){
//获取下一个节点
temp = temp.next;
}
//添加节点在最后一位
temp.next = node;
}
/**
* 添加节点到第 i 位
* @param node
* @param i
*/
public void insertNode(Node node, int i){
//判断插入的位置 i 是否合理
if(i < 0 || i > length() + 1){
System.out.println("插入位置不合理");
}else{
Node temp = head;
for(int j = 0; j < i; j++){
temp = temp.next;
}
node.next = temp.next;
temp.next = node;
}
}
/**
* 删除第i位的节点
* @param i
*/
public void deleteNode(int i){
Node temp = head;
//判断插入的位置 i 是否合理
if(i < 0 || i > length()){
System.out.println("删除的位置不存在");
return;
}else{
//判断删除的节点是否为最后一个节点
if(i == length()){
//遍历到要删除的节点的前一个节点
for(int j = 0; j < i - 1; j++){
temp = temp.next;
}
temp.next = null;
}else{
//遍历到要操作的i位置的前一个node
for(int j = 0; j < i - 1; j++){
temp = temp.next;
}
//将要删除的节点的下一个节点 给 要删除的上一个节点指着
temp.next = temp.next.next;
//把要删除的节点的下个节点指针置空
temp.next.next = null;
}
}
}
/**
* 获取节点的长度(长度从1开始)
* @return
*/
public int length(){
int index = 0;
Node temp = head;
while(temp.next != null){
index++;
temp = temp.next;
}
return index;
}
/**
* 打印所有节点
*/
public void print(){
Node temp = head;
while(temp.next != null){
System.out.println(temp.next.data);
temp = temp.next;
}
}
public void print(int num){
System.out.println(num);
}
public static void main(String[] args) {
LinkedList li = new LinkedList();
Node node = new Node(1);
li.addNode(node);
Node node1 = new Node(2);
li.addNode(node1);
Node node2 = new Node(3);
li.addNode(node2);
// li.print();
// System.out.println(li.length());
li.deleteNode(2);
li.print();
// li.print(li.length());
}
}
单向链表
最新推荐文章于 2024-07-29 17:54:45 发布