数据结构和算法分析数据结构与算法

Leetcode-面试题 02.04 分割链表

2021-10-06  本文已影响0人  itbird01

面试题 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;
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读