單鏈表的增刪改查

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) {
        
    }
}
相關文章
相關標籤/搜索