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;
            }
        }
    }
    
    
    
     
  • 相关阅读:
    问题:弹窗还没点击确认就执行了跳转
    关于版本的问题
    timeUtil
    使用jframe编写一个base64加密解密工具
    JMeter 命令行(非GUI模式)详解(一)-分布式(远程)执行脚本及查看指定结果、日志
    jmeter分布式压测 java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
    mysql5.7日志时间与系统时间不一致
    mysql查看执行sql语句的记录日志
    Appium如何获取appPackage和appActivity
    关于测试设置
  • 原文地址:https://www.cnblogs.com/motorye/p/12546825.html
Copyright © 2011-2022 走看看