节点类
static Node head=new Node();
static class Node{
int data;
Node next;
public Node() {//无参构造方法,默认data为0
}
public Node(int data) {//带data构造方法
this.data=data;
}
}
添加节点
/*
* 添加节点,尾插法
*/
public void addNode(int data) {
Node node = new Node(data);//创建新节点对象
Node temp = head;
while(temp.next != null) {//找到当前链表尾结点
temp=temp.next;
}
temp.next=node;
}
遍历节点
/*
* 遍历链表
*/
public void printNode() {
Node temp = head.next;
while(temp!=null) {
System.out.print(temp.data+" ");
temp=temp.next;
}
System.out.println();
}
统计链表长度
/*
* 统计链表长度
*/
public static int length() {
int length=0;
Node temp = head;//head为头指针,不算作链表节点
while(temp.next!=null) {
length++;
temp=temp.next;
}
return length;
}
插入节点
/*
* 通过索引插入节点
*/
public void insertNode(int index,int data) {
int size = length()+1;//+1是因为尾部插入的索引值是当前链表尾结点后一个哦,不是尾结点的索引
if(index==size) { //在链表尾部插入则直接调用addNode方法
addNode(data);
return;
}
if(index<1||index>size) {
System.out.println("不正确的位置索引");
return;
}
Node temp=head;
Node node = new Node(data);
int length=1;
while(temp.next!=null) {
if(index==length++) {//先判断是否相等,然后length++
node.next=temp.next;
temp.next=node;
return;
}
temp=temp.next;
}
}
删除尾结点
/*
* 删除尾结点
*/
public void popNode() {
Node temp = head;
Node pre = temp;
while(temp.next!=null) {
pre=temp;
temp=temp.next;
}
pre.next=null;//链表尾结点的next始终指向NULL
}
通过索引删除节点
/*
* 通过索引删除节点
*/
public void deleteNode(int index) {
if(index==length()) { //如果索引位置是尾结点位置,调用popNode方法
popNode();
return;
}
if(index<1||index>length()) {
System.out.println("删除节点位置索引不合法");
return;
}
Node temp=head;
int length=1;
while(temp.next!=null) {
if(index==length++) {
System.out.println(temp.data);
//删除只需要把要删除节点的上一个节点的next指向删除节点的下一个节点
temp.next=temp.next.next;
return;
}
temp=temp.next;
}
}
关于单链表的基本操作就写到这里了,当然关于链表的其他的一些操作我可能会出后续。。再会。。。