单链表的删除指定元素

单链表删除指定元素key

1.删除第一次出现的元素key
分析:
1)如果链表为空,就不存在删除元素,所以刚开始应该对链表的长度进行判断
2)如果要删除的元素为头结点,所以首先要对头结点进行判断
3)如果要删除一个元素,那么要站到它的前驱,再进行删除,否则无法进行删除

public int remove(int key) {
        int oldData=0;
        Node pre=this.head;
        if (this.head==null){
            throw new UnsupportedOperationException("该链表为空,不存在指定元素key");
        }
        if (this.head!=null&this.head.data==key){
            oldData=this.head.data;
            this.head=this.head.next;
            return oldData;
        }
        while(pre.next!=null){
            if (pre.next.data==key){
                oldData=pre.next.data;
                pre.next=pre.next.next;
                return oldData;
            }else{
                pre=pre.next;
            }
        }
        throw new UnsupportedOperationException("没有找到该元素");
    }

2.删除链表中出现的所有元素key
分析:
1.同样的,链表为空,那么就不存在删除指定元素了,所以在此处要进行判断
2.接下来如果要对指定元素及进行删除,那么要从头开始遍历,如果找到指定元素,那么就对其进行删除,在此处定义两个节点,一个是前驱节点pre,一个是cur节点,cur负责找指定元素,pre进行删除。
3.判断完之后要对其头结点进行判断

 public void removeAllKey(int key) {
        if (this.head==null){
            return;
        }
        Node pre=this.head;
        Node cur=this.head.next;
        while(cur!=null){
            if (cur.data==key){
                pre.next=cur.next;
                cur=cur.next;
            }else{
                pre=cur;
                cur=cur.next;
            }
        }
        if (this.head.data==key){
            this.head=this.head.next;
        }
    }

你可能感兴趣的:(Java1,DS)