class ListNode{
public int val;
public ListNode next;
public ListNode(int val){
this.val=val;
}
}
public class MyLinkedList {
public ListNode head;
//头插法
public void addFirst(int data) {
ListNode node = new ListNode(data);
if (this.head == null) {
this.head = node;
} else {
node.next = this.head;
this.head = node;
}
}
//打印链表
public void display() {
ListNode cur = head;
while (cur != null) {
System.out.print(cur.val + " ");
cur = cur.next;
}
System.out.println();
}
//尾插法
public void addLast(int data) {
ListNode node = new ListNode(data);
if (this.head == null) {
this.head = node;
} else {
ListNode cur = head;
while (cur.next != null) {
cur = cur.next;
}
cur.next = node;
// node.next=null;
}
}
//得到单链表的长度
public int size(){
int count=0;
ListNode cur=head;
while(cur!=null){
count++;
cur=cur.next;
}
return count;
}
//找到index的前一个下标
public ListNode indexPrev(int index){
ListNode cur=head;
while(index-1!=0){
cur=cur.next;
index--;
}
return cur;
}
//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index,int data){
if(index<0||index>size()){
System.out.println("index位置不合法");
return;
}
if(index==0){
addFirst(data);
return;
}
if(index==size()){
addLast(data);
return;
}
ListNode cur=indexPrev(index);
ListNode node=new ListNode(data);
node.next=cur.next;
cur.next=node;
}
//查找是否包含关键字key是否在单链表当中
public boolean contains(int key){
ListNode cur=head;
while(cur!=null){
if(cur.val!=key){
cur=cur.next;
}else{
return true;
}
}
return false;
}
//找到要删除节点的前驱节点cur
public ListNode searchPrev(int key){
ListNode cur=this.head;
while(cur.next!=null){
if(cur.next.val==key){
return cur;
}
cur=cur.next;
}
return null;
}
//删除第一次出现关键字为key的节点
public void remove(int key){
if(this.head==null){
System.out.println("链表为空,没有要删除的节点");
return;
}
if(this.head.val==key){
this.head=this.head.next;
return;
}
ListNode cur=searchPrev(key);
if(cur==null){
System.out.println("没有要删除的节点");
return;
}else{
ListNode del=cur.next;
cur.next=del.next;
}
}
//删除所有值为key的节点
public ListNode removeAllKey(int key){
if(head==null){
System.out.println("链表为空");
return null;
}
ListNode prev=this.head;
ListNode cur=this.head.next;
while(cur!=null){
if(cur.val==key){
prev.next=cur.next;
cur=cur.next;
}else{
prev=cur;
cur=cur.next;
}
}
if(this.head.val==key){
this.head=this.head.next;
}
return this.head;
}
//清空链表
public void clear(){
while(head!=null){
ListNode headNext=head.next;
head.next=null;
head=headNext;
}
}
}
Java实现无头单链表~
最新推荐文章于 2024-07-13 13:55:40 发布