Sort Linked List Already Sorted Using Absolute Values
给一个按照绝对值排序的链表, 求按照数字排序的链表.
这题就是先拆分成pos和neg两个链表, 然后如果neg是空的, 返回pos, 如果不是, 翻转neg后连上pos再返回.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode sortLinkedList(ListNode head) {
ListNode neg = new ListNode();
ListNode pos = new ListNode();
ListNode nh = neg;
ListNode ph = pos;
ListNode p = head;
while(p != null){
if(p.val >= 0){
ph.next = new ListNode(p.val);
ph = ph.next;
}
else
{
nh.next = new ListNode(p.val);
nh = nh.next;
}
p = p.next;
}
if(neg.next == null)
return pos.next;
ListNode th = rev(neg.next);
ListNode d = th;
while(d.next != null)
d = d.next;
d.next = pos.next;
return th;
}
private ListNode rev(ListNode head) {
ListNode newHead = null;
while(head != null){
ListNode next = head.next;
head.next = newHead;
newHead = head;
head = next;
}
return newHead;
}
}