LinkedList BlackBox
给一个 linkedlist,里面的 element 都排序好了,但是是一个 blackbox,有三个 function 可以调用。pop() 随机 pop 出最前面或最后面的 element,peek() 随机偷看最前面或最后面的 element,isEmpty()回传linkedlist是不是空了。问设计一个资料结构,list 或是 array 都可以,把 linkedlist 里面所有的 element 都拿出来,并保持他们的排序。
思路
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
next = null;
}
}
// use peek();
public ListNode getLinkedList(ListNode head) {
if (head == null) {
return null;
}
ListNode small = new ListNode(0);
ListNode dummyS = small;
ListNode large = new ListNode(0);
ListNode dummyL = large;
while (!head.isEmpty()) {
ListNode first = head.peek();
ListNode newNode = head.pop();
if (newNode.val > first.val) {
large.next = newNode;
large = large.next;
} else {
small.next = newNode;
small = small.next;
}
}
small.next = reverse(dummyL.next);
return dummyS.next;
}
private ListNode reverse(ListNode head) {
if (head == null) {
return null;
}
ListNode prev = null;
while (head != null) {
ListNode tmp = head.next;
head.next = prev;
prev = head;
head = tmp;
}
return prev;
}Follow Up
Last updated