SouthLeetCode-打卡24年02月第1周

SouthLeetCode-打卡24年02月第1周

// Date : 2024/02/01 ~ 2024/02/04

034.合并两个有序链表

(1) 题目描述

034 #LeetCode.21. #北岸计划 2024/02/01

将两个升序链表合并为一个新的 升序 链表并返回。

新链表是通过拼接给定的两个链表的所有节点组成的。

(2) 题解代码

class Solution {
   
    private ListNode mergeLists(ListNode curr, ListNode list) {
   
        while (list != null) {
   
            int curVal = list.val;
            curr.next = new ListNode(curVal);
            curr = curr.next;
            list = list.next;
        }
        return curr;
    }

    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
   
        ListNode dummy = new ListNode();
        ListNode curr = dummy;

        while (list1 != null && list2 != null) {
   
            boolean condition = list1.val < list2.val;
            int curVal = condition ? list1.val : list2.val;
            curr.next = new ListNode(curVal);
            curr = curr.next;
            if (condition) {
   
                list1 = list1.next;
            } else {
   
                list2 = list2.next;
            }
        }

        curr = mergeLists(curr, list1);
        curr = mergeLists(curr, list2);

        return dummy.next;
    }
}

035.合并K个升序链表

(1) 题目描述

035 #LeetCode.23. #北岸计划 2024/02/01

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

(2) 题解代码

class Solution {
   
    public ListNode mergeKLists(ListNode[] lists) {
   
        int size = lists.length;
        ListNode curr;
        int curVal;
        ListNode dummy = new ListNode();
        List<Integer> result = new ArrayList<>();
        for(int i=0 ; i<size ; i++){
   
            curr = lists[i];
            while(curr != null){
   
                curVal = curr.val;
                result.add(curVal);
                curr = curr.next;
            }
        }
        Collections.sort(result);
        int length = result.size();
        ListNode resDummy = new ListNode();
        curr = resDummy;
        for(int k=0 ; k<length ; k++){
   
            curr.next = new ListNode(result.get(k));
            curr = curr.next;
        }
        return resDummy.next;

    }
}

036.链表的中间结点Ⅰ

(1) 题目描述

036 #LeetCode.NULL. #北岸计划 2024/02/03

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第个中间结点。

(2) 题解代码

public class MiddleNodeFor1 implements MiddleNode {
   
    @Override
    public ListNode middleNode(ListNode head){
   
        ListNode dummy = new ListNode();
        dummy.next = head;
        ListNode slow = dummy;
        ListNode fast = head;
        while(fast != null){
   
            slow = slow.next;
            fast = fast.next;
            fast = fast != null ? fast.next : fast;
        }
        return slow;
    }
}

037.链表的中间结点Ⅱ

(1) 题目描述

037 #LeetCode.876. #北岸计划 2024/02/03

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第个中间结点。

(2) 题解代码

class Solution {
   
    public ListNode middleNode(ListNode head) {
   
        ListNode dummy = new ListNode();
        dummy.next = head;
        ListNode slow = dummy;
        ListNode fast = dummy;
        while(fast != null){
   
            slow = slow.next;
            fast = fast.next;
            fast = fast != null ? fast.next : fast;
        }
        return slow;
    }
}

038.分隔链表

(1) 题目描述

038 #LeetCode.86. #北岸计划 2024/02/04

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,

使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你应当 保留 两个分区中每个节点的初始相对位置。

(2) 题解代码

class Solution {
   
    public ListNode partition(ListNode head, int x) {
   
        if(head == null) return null;
        ListNode curr = head;
        List<Integer> list = new ArrayList();
        int curVal;
        while(curr != null){
   
            list.add(curr.val);
            curr = curr.next;
        }
        List<Integer> sList = new ArrayList();
        for(int i=0 ; i<list.size() ; i++){
   
            curVal = list.get(i);
            if(curVal < x){
   
                sList.add(curVal);
                list.remove(i);
                i--;
            }
        }
        for(int j=0 ; j<list.size() ; j++){
   
            curVal = list.get(j);
            sList.add(curVal);
        }
        ListNode newHead = new ListNode(sList.get(0));
        curr = newHead;
        for(int k=1 ; k<sList.size() ; k++){
   
            curVal = sList.get(k);
            curr.next = new ListNode(curVal);
            curr = curr.next;
        }
        return newHead;
    }
}

相关推荐

  1. SouthLeetCode-24021

    2024-02-07 20:28:03       28 阅读
  2. SouthLeetCode-24022

    2024-02-07 20:28:03       30 阅读
  3. SouthLeetCode-24023

    2024-02-07 20:28:03       32 阅读
  4. SouthLeetCode-24014

    2024-02-07 20:28:03       32 阅读
  5. SouthLeetCode-24015

    2024-02-07 20:28:03       30 阅读
  6. OSINT技术情报精选·202451

    2024-02-07 20:28:03       10 阅读
  7. OSINT技术情报精选·202461

    2024-02-07 20:28:03       7 阅读
  8. 2312-241工作笔记整理(前端)

    2024-02-07 20:28:03       26 阅读
  9. 2024122

    2024-02-07 20:28:03       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-07 20:28:03       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-07 20:28:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-07 20:28:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-07 20:28:03       18 阅读

热门阅读

  1. CDN的深入理解+搭建自己的CDN

    2024-02-07 20:28:03       35 阅读
  2. IDEA2023SpingBoot只能勾选17和21

    2024-02-07 20:28:03       35 阅读
  3. Python 字符串追加

    2024-02-07 20:28:03       29 阅读
  4. Elasticsearch单个索引数据量过大的优化

    2024-02-07 20:28:03       38 阅读
  5. C Primer Plus(第六版)15.9 编程练习 第5题

    2024-02-07 20:28:03       30 阅读