zoukankan      html  css  js  c++  java
  • 删除链表里全部重复元素以及删除链表重复元素只保留一个

    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;
            }
        }
    }
    
    
    
     
  • 相关阅读:
    2020软件工程第二次结对作业
    软工实践个人总结
    2020软件工程实践第一次个人编程作业
    2020软件工程实践第一次作业
    第4次作业-结对编程之实验室程序实现
    2020年FZU软件工程第一次结对作业
    2020 福州大学软件工程 第一次作业
    2020 福州大学软件工程 实践个人总结
    2020福州大学软件工程实践 第二次结队作业
    福州大学软件工程实践 结队作业
  • 原文地址:https://www.cnblogs.com/motorye/p/12546825.html
Copyright © 2011-2022 走看看