jumbo size pamper的code值多少点?# PennySaver - 省钱一族
b*n
1 楼
做了这道题,被accepted, 但觉得代码很罗嗦冗长。
怎么改进呢?
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
class ListNodeWrapper {
ListNode start;
ListNode end;
}
public class Solution {
private ListNode partionList(ListNode start, ListNode end) {
ListNode end1 = start;
ListNode fast = start;
while (fast != end) {
fast = fast.next;
if (fast != end) {
fast = fast.next;
end1 = end1.next;
}
}
return end1;
}
private ListNodeWrapper merge(ListNode start1, ListNode end1, ListNode
start2, ListNode end2) {
ListNode ln1 = start1;
ListNode ln2 = start2;
ListNode ln;
ListNodeWrapper lnw = new ListNodeWrapper();
if (ln1.val <= ln2.val) {
ln = ln1;
ln1 = ln1.next;
} else {
ln = ln2;
ln2 = ln2.next;
}
lnw.start = ln;
while (ln != end1 && ln != end2) {
if (ln1.val <= ln2.val) {
ln.next = ln1;
ln = ln.next;
ln1 = ln1.next;
} else {
ln.next = ln2;
ln = ln.next;
ln2 = ln2.next;
}
}
if (ln == end1) {
ln.next = ln2;
lnw.end = end2;
} else {
ln.next = ln1;
lnw.end = end1;
}
lnw.end.next = null;
return lnw;
}
private ListNodeWrapper mergeSort(ListNode start, ListNode end) {
ListNodeWrapper lnw = new ListNodeWrapper();
if (start == end) {
lnw.start = start;
lnw.end = end;
return lnw;
}
ListNode end1 = partionList(start, end);
ListNode start2 = end1.next;
ListNodeWrapper lnw1 = mergeSort(start, end1);
ListNodeWrapper lnw2 = mergeSort(start2, end);
lnw = merge(lnw1.start, lnw1.end, lnw2.start, lnw2.end);
return lnw;
}
public ListNode sortList(ListNode head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if (head == null) return null;
ListNode end = head;
while(end.next != null) end = end.next;
ListNodeWrapper lnw = mergeSort(head, end);
return lnw.start;
}
}
怎么改进呢?
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
class ListNodeWrapper {
ListNode start;
ListNode end;
}
public class Solution {
private ListNode partionList(ListNode start, ListNode end) {
ListNode end1 = start;
ListNode fast = start;
while (fast != end) {
fast = fast.next;
if (fast != end) {
fast = fast.next;
end1 = end1.next;
}
}
return end1;
}
private ListNodeWrapper merge(ListNode start1, ListNode end1, ListNode
start2, ListNode end2) {
ListNode ln1 = start1;
ListNode ln2 = start2;
ListNode ln;
ListNodeWrapper lnw = new ListNodeWrapper();
if (ln1.val <= ln2.val) {
ln = ln1;
ln1 = ln1.next;
} else {
ln = ln2;
ln2 = ln2.next;
}
lnw.start = ln;
while (ln != end1 && ln != end2) {
if (ln1.val <= ln2.val) {
ln.next = ln1;
ln = ln.next;
ln1 = ln1.next;
} else {
ln.next = ln2;
ln = ln.next;
ln2 = ln2.next;
}
}
if (ln == end1) {
ln.next = ln2;
lnw.end = end2;
} else {
ln.next = ln1;
lnw.end = end1;
}
lnw.end.next = null;
return lnw;
}
private ListNodeWrapper mergeSort(ListNode start, ListNode end) {
ListNodeWrapper lnw = new ListNodeWrapper();
if (start == end) {
lnw.start = start;
lnw.end = end;
return lnw;
}
ListNode end1 = partionList(start, end);
ListNode start2 = end1.next;
ListNodeWrapper lnw1 = mergeSort(start, end1);
ListNodeWrapper lnw2 = mergeSort(start2, end);
lnw = merge(lnw1.start, lnw1.end, lnw2.start, lnw2.end);
return lnw;
}
public ListNode sortList(ListNode head) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
if (head == null) return null;
ListNode end = head;
while(end.next != null) end = end.next;
ListNodeWrapper lnw = mergeSort(head, end);
return lnw.start;
}
}