#单链表增删
##1、创建节点类
public class ListNode {
public int val;//数据域
ListNode next;//指针域
public ListNode(int val){
this.val=val;
}
public ListNode(){
}
}
##2、单链表类
class SingleLinkList {
private int size;//链表长度
private ListNode head;//头节点
Object[] obj;
public SingleLinkList(int i) {
this.obj = new Object[i];//初始化链表长度
}
}
##3、头插法
public void headInsert(ListNode node){
//如果头节点的指向首元的next为空,则第一个首元即为
if(head.next==null){
head= node;
}
else{
node.next=head;
head=node;
}
size++;
}
##4、遍历链表
//遍历链表
public void scanList(){
ListNode node=head;//存储当前链表头结点的地址
while(node!=null){
System.out.println(node.val);//打印数据
node=node.next;//继续访问下一节点
}
System.out.println("遍历完成");
}
##5、在链表中间位置插入节点
public void insertAtMediumList(ListNode node,int location){
if(location<0||location>size){
//判断插入位置是否在链表长度范围内
System.out.println("非法插入");
return;
}
if(location==0){
//头插法
headInsert(node);
return;
}
//关键:找到插入位置的前节点
ListNode listNode = new ListNode();//存储插入位置的前节点
listNode=head;
int i=1;//首元节点序号
while(i<location){
//定位插入位置前的节点
listNode=listNode.next;
i++;
}
ListNode emp= new ListNode();//过渡存储插入位置前的节点next内容
emp=listNode.next;
listNode.next=node;//插入新节点
node.next=emp;
size++;
}
##6、删除节点
public void removeIndex(int index){
//判断所要删除节点索引是否合法
if(!(index<0||index>size)) {
System.out.println("删除位置不合法");
return;
}
//删除头节点的情况
if (index == 0) {
ListNode temp = head;
head = head.next;
temp.next = null;
}
ListNode listNode = new ListNode();//过渡节点
int i=1;//首元数据序号
listNode=head;
//找到删除节点的前节点
while(i<index){
listNode=listNode.next;
i++;
}
ListNode delCurrentNode=listNode.next;//所要删除的节点
listNode.next=delCurrentNode.next;
delCurrentNode.next=null;//所要删出节点的指针域置空
size--;
}
初学,诸多不解,求学指正