题意:给定一个序列,将他进行重排序,下表如下:a0, an, a1, an-1, ...
解法:用了一个很朴素的想法,就是将a0, a1, a2...和an, an-1, an-2...,最后合并
public class Solution {
public void reorderList(ListNode head) {
ListNode cnt = head;
int N = 0;
while (cnt != null) {
cnt = cnt.next;
N++;
}
cnt = head;
ListNode head1 = new ListNode(-1), tail1 = head1;
for (int i = 1; i <= N / 2; i++) {
ListNode temp = cnt;
cnt = cnt.next;
tail1.next = temp;
temp.next = null;
tail1 = tail1.next;
}
ListNode head2 = new ListNode(-1);
for (int i = N / 2 ; i < N; i++) {
ListNode temp = cnt;
cnt = cnt.next;
temp.next = head2.next;
head2.next = temp;
}
cnt = new ListNode(-1);
while (head2 != null && head1 != null) {
cnt.next = head1;
head1 = head1.next;
cnt = cnt.next;
cnt.next = head2;
head2 = head2.next;
cnt = cnt.next;
}
if (head1 != null) {
cnt.next = head1;
}
if (head2 != null)
cnt.next = head2;
}
public static void main(String[] args) {
Solution s = new Solution();
ListNode a0 = new ListNode(0);
ListNode a1 = new ListNode(1);
ListNode a2 = new ListNode(2);
ListNode a3 = new ListNode(3);
ListNode a4 = new ListNode(4);
// a0.next = a1;
a1.next = a2;
// a2.next = a3;
// a3.next = a4;
s.reorderList(a1);
}
}