d202541

目录

一、分隔链表

二、旋转链表

三、删除链表中重复的数字


一、分隔链表

用两个list存一下小于和大于等于 x的节点

最后串起来就行

java 复制代码
 public ListNode partition(ListNode head, int x) {
        ListNode ret = new ListNode(1);
        ListNode cur = ret;
        List<ListNode> small = new ArrayList<>();
        List<ListNode> big = new ArrayList<>();
        List<ListNode> equal = new ArrayList<>();
        while(head != null){
            if(head.val < x){
                small.add(head);
            } else if(head.val >= x){
                big.add(head);
            }
            head = head.next;
        }
        for(int i = 0;i < small.size();i++){
            cur.next = small.get(i);
            cur = cur.next;
        }
        for(int i = 0;i < big.size();i++){
            cur.next = big.get(i);
            cur = cur.next;
        }
        if(big.size() > 0){
            big.get(big.size() - 1).next = null;
        } else if(small.size() > 0){
            small.get(small.size() - 1).next = null;
        }
        return ret.next;    
    }

二、旋转链表

题目意思就是每次把末尾最后一个放到最左边

可以用list集合存一下 每次去掉最后一个,并把对其头插

需要考虑一下k特别大的情况 取余一下

java 复制代码
 public ListNode rotateRight(ListNode head, int k) {
        List<ListNode> list = new LinkedList<>();
        ListNode ret = new ListNode(1);
        ListNode cur = ret;
        while(head != null){
            list.add(head);
            head = head.next;
        }
        if(list.size() > 0){
            k = k % list.size();
        }
        while(k-- != 0){
            if(list.size() > 0){
                 ListNode first = list.get(list.size() - 1);
                list.remove(list.size() - 1);
                list.addFirst(first);
            }
        }
        for(int i = 0;i < list.size();i++){
            cur.next = list.get(i);
            cur = cur.next;
        }
        cur.next = null;
        return ret.next;
    }

三、删除链表中重复的数字

用map记录一下,哪些是重复数字,哪些不是重复数字

java 复制代码
public ListNode deleteDuplicates(ListNode head) {
        Map<Integer,Boolean> map = new HashMap<>();
        ListNode cur = head;
        while(cur != null){
            if(map.containsKey(cur.val)){
                map.put(cur.val,false);
            }else{
                map.put(cur.val,true);
            }
            cur = cur.next;
        }
        cur = head;
        ListNode ret = new ListNode(1);
        ListNode curRet = ret;
        while(cur != null){
            if(map.get(cur.val)){
               curRet.next = cur;
               curRet = curRet.next;
            }
            cur = cur.next;
        }
        curRet.next = null;
        return ret.next;
    }
相关推荐
阿猿收手吧!8 小时前
windows本机vscode通过ssh免密登录远程linux服务器 && git push/pull 免密
服务器·windows·vscode
zxm85138 小时前
如何在Windows系统中加入程序自启动
windows
~~李木子~~9 小时前
Windows软件自动扫描与分类工具 - 技术文档
windows·分类·数据挖掘
-指短琴长-10 小时前
Qt的下载和安装【Windows】
开发语言·windows·qt
不懂音乐的欣赏者11 小时前
Windows 下 ROS/ROS2 开发环境最优解:WSL 比直接安装、虚拟机、双系统更优雅!
linux·windows·ubuntu·ros·wsl·ros2·双系统
电脑小白技术11 小时前
国产电脑可以装windows吗_国产电脑安装windows要求及方法
windows·电脑·国产电脑装windows·国产电脑系统改windows
demodashi66613 小时前
Linux下ag搜索命令详解
linux·运维·windows
-可乐加冰吗16 小时前
SuperMap iObjects .NET 11i 二次开发(十七)—— 叠加分析之擦除
windows·.net
cws20040117 小时前
SQL Server 2008 群集配置指南(Windows 2008)-1
windows
天地之于壹炁兮1 天前
编程I/O入门指南:核心操作全解析
数据库·windows·microsoft