Leetcode-面试题 02.04 分割链表

作者: itbird01 | 来源:发表于2021-10-06 09:58 被阅读0次

    面试题 02.04. 分割链表

    解题思路

    1.分析题意,不需要 保留 每个分区中各节点的初始相对位置,所以简化题目,可以把小于x的放置与左边,大于等于x的放置与右边
    2.Java数据结构中,arraylist是基于数组实现的,只能有序添加;linkedlist可以实现无序添加
    3.将链表进行遍历,添加到linkedlist中
    4.遍历linkedlist,进行result链表

    解题遇到的问题

    后续需要总结学习的知识点

    1.借助了LinkedList的特性,如果不使用LinkedList,是否还有其他解法?
    2.两次遍历,耗时较大,是否可以优化?

    ##解法1
    class Solution {
        public ListNode partition(ListNode head, int x) {
            LinkedList<Integer> list = new LinkedList<Integer>();
            ListNode t = head;
            while (t != null) {
                if (t.val >= x) {
                    list.add(t.val);
                } else {
                    list.addFirst(t.val);
                }
                t = t.next;
            }
            int i = 0;
            ListNode result = head;
            while (head != null) {
                head.val = list.get(i);
                head = head.next;
                i++;
            }
            return result;
        }
    
        public class ListNode {
            int val;
            ListNode next;
            ListNode(int x) {
                val = x;
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:Leetcode-面试题 02.04 分割链表

        本文链接:https://www.haomeiwen.com/subject/xcxrnltx.html