用Java实现一个单链表

//单向链表结点的定义
class ListNode{
	int data;//假设数据类型是整数型
	ListNode next;
//构造函数
public ListNode(int data){
	this.data=data;
	this.next=null;
	}
}
//单向链表的定义
class MylinkedList{
	ListNode head;
	int size;
public MylinkedList(){
  	this.head=null;
  	this.size=0;
	}
}
//创建链表
public static void linkedListCreate(MylinkedList list){
	//初始化链表
	list.head=null;
  	list.size=0;
}
//销毁链表
public static void linkedListCreate(MylinkedList list){
	//遍历链表,释放每个结点
	while(list.head!=null){
	ListNode temp=temp;
	list.head=list.head.next;
	temp.next=null;//断开节点与链表的连接
	}
  list.size=0;
}
//往链表第i个位置插入值为value的元素
public static void linkedListInsert(MylinkedList list,int i,int value){
//检查索引的合法性
  if(i<0||i>=size){
  	System.out.println("Invalid index\n");
	return;
  }
 //创建新的节点
  ListNode newNode=new ListNode(value);
 //如果是在链表头部插入
  if(i==0){
	newNode.next=list.head;
	list.head=newNode;
  }else{
 //如果是在链表中间或尾部插入,首先创建一个current指针将其初始化为链表头部,然后用它遍历找到插入位置的前一个结点
	ListNode current=list.head;
	for(int j=0;j<i-1;j++){
		current=current.next;
	}
	newNode.next=current.next;
	current.next=newNode;
  }
  list.size++;
}
//删除链表list的第i个节点
public static void linkedListRemove(MylinkedList list,int i){
    //检查索引的合法性
    if(i<0||i>=list.size){
        System.out.println("Invalid index\n");
        return;
    }
    //如果删除的是头节点
    if(i==0){
       list.head=list.head.next;
    }else{
        ListNode current=list.head;
        //找到第i-1个节点
        for(int j=0;j<i-1;j++){
            current=current.next;
        }
        //删除第i个节点
       current.next=current.next.next;
    }
    list.size--;
}
//查找链表中list中值为value的结点,并返回
public static ListNode linkedListFind(MylinkedList list,int value){
    ListNode current=list.head;
    while(current!=null){
        if(current.data==value){
            return current;
        }
        current=current.next;
    }
    return null;
}
//获取链表中第i个结点
public static ListNode linkedListGet(MylinkedList list,int i){
    if(i<0||i>=list.size){
        System.out.println("Invalid index\n");
        return null;
    }
    ListNode current=list.head;
    for(int j=0;j<i;j++){
        current=current.next;
    }
    return current;
}
//更新链表list中第i个结点的值为value
public static void linkedListUpdate(MylinkedList list,int i,int value){
    ListNode node=linkedListGet(list,i);
    if(node!=null){
        node.data=value;
    }else{
        System.out.println("Invalid index\n");
    }
}

全部评论

相关推荐

在写周报的打工人很独...:这个笔试昨天晚上做了一下,真难啊,前后端,ai全有
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务