删除链表里全部重复元素以及删除链表重复元素只保留一个

public class ListNodeDemo01 {/**
     * 删除链表中全部重复元素
     * @param node 传入链表头
     * @return 返回头节点指针
     */
    public static Node delDup(Node node) {
        //生成一个头节点
        Node first = new Node(-1);
        Node cur = node;
        first.next = node;
        //找个头节点的代理节点
        Node proxy = first;
        
        if(node == null) {
            return null;
        }
        while(cur != null && cur.next != null) {
            if(cur != null && cur.data == cur.next.data) {
                //后面可能还有2
                //2,2,2,3
                int val = cur.data;
                while(cur != null && cur.data == val) {
                    //这里一直找到那个新的cur->3
                    cur = cur.next;
                }
                //直到找到3,把前面的去掉,改变链,proxy的后面就是3
                proxy.next = cur;
            }else {
                //假如都不一样,那么第一个就是proxy了,链还是原来的链,proxy慢慢往后推
                //1,2,3
                proxy = cur;
                //确定新的cur,准备下一轮
                cur=cur.next;
            }
        }
        //返回头的下一个
        return first.next;
    }
    
    /**
     * 删除链表中重复的元素,重复的只保留一个
     * @param node  传入头节点
     * @return  返回头节点
     */
    public static Node DelMoreDup(Node node) {
        
        Node first = new Node(-1);
        Node cur= node;
        first.next = node;
        //代理头节点
        Node proxy = first;
        
        if(node == null) {
            return null;
        }
        while(cur != null && cur.next != null) {
            if(cur != null && cur.data == cur.next.data) {
                //1,1,1,2,3
                //此时proxy = first 保留第一个,要把proxy = cur;
                proxy = cur;
                int val = cur.data;
                while(cur != null && cur.data == val) {
                    cur = cur.next;
                }
                proxy.next = cur;
            }else {
                //1,2,3,4,4,4,5,6
                proxy = cur;
                cur = cur.next;
            }
        }
        return first.next;
    }
}
 
 
 
 
class Node{
    
    int data;
    Node next;
    
    public Node(int data) {
        this.data = data;
    }
    
    public void append(Node node) {
        Node currentNode = this;
        while(true) {
            if(currentNode.next == null) {
                currentNode.next = node;
                break;
            }
            currentNode = currentNode.next;
        }
    }
    
    public void show() {
        Node currentNode = this;
        while(true) {
            System.out.println(currentNode.data);
            if(currentNode.next == null) {
                break;
            }
            currentNode = currentNode.next;
        }
    }
}
 
  
 
 

猜你喜欢

转载自www.cnblogs.com/motorye/p/12546825.html