关于java:单链表的增删改查

public class MyLinkedList {
    
    static class ListNode {
        int val;
        ListNode next;
        public ListNode(int val){
            this.val = val;
        }
    }

    ListNode head;// 头结点
    ListNode tail;// 尾结点
    
    int size;
    
    public MyLinkedList(){
        head = null;
        tail = null;
        size = 0;
    }
    
    // 插入方法 
    
    public void insert(int position, int number){
        if(position > size){
            return;
        }
        
        ListNode newNode = new ListNode(number);
        // 要插入的地位是0(即为头部)
        // case 1 : 头部插入
        if(position == 0){
            newNode.next = head;
            head = newNode;
            // 判断尾结点是不是null, 如果是null阐明这是插入的第一个元素
            if(tail == null){
                tail = newNode;
            }
            size++;
        } 
        
        // case 2 : 尾部插入
        else if(position == size){
            this.append(number);
        } 
        // case 3 : 两头插入
        else {
            
            // 找到插入地位之前的节点
            ListNode prev = head;
            for (int i = 0; i < position - 1; i++) {
                prev = prev.next;
            }
            
            ListNode next = prev.next;
            newNode.next = next;
            prev.next = newNode;
            
            size++;
            
        }
    }

    
    public void append(int number){
        ListNode newNode = new ListNode(number);
        
        if(tail == null){
            tail = newNode;
        } else {
            tail.next = newNode;
            tail = newNode;
        }
        
        size++;
        
    }
    
    // 删除
    public void delete(int number){
        
        // 删除头结点
        if(head != null && head.val == number){
            head = head.next;
            size--;
            // 如果size==0  阐明只有一个元素
            if(size == 0) {
                tail = head;
            }
        }
        else 
        {
            ListNode prev = head;     
            ListNode current = head;  
            
            while(prev != null && current != null){
                if(current.val == number){
                    if(current == tail){
                        tail = prev;
                    }
                    
                    prev.next = current.next;
                    size--;
                    return;
                }
                prev = current;
                current = current.next;
            }
        }
    }
    
    // 查找   返回地位
    public int search(int number){
        
        ListNode current = head;
        for (int i = 0; current != null; i++) {
            if(current.val == number){
                return i;
            }
            current = current.next;
        }
        
        return -1;
    }
    
    // 批改
    public int update(int oldValue, int newValue){
        
        ListNode current = head;
        for (int i = 0; current != null; i++) {
            if(current.val == oldValue){
                current.val = newValue;
                return i;
            }
            current = current.next;
        }
        
        return -1;
    }
    
    public static void main(String[] args) {
        
    }
}

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理