class Solution {
// 无返回值
public void reorderList(ListNode head) {
if( head == null){
return;
}
// 得到中间节点
ListNode mid = myMidNode(head);
// 分割链表
ListNode l1 = head;
ListNode l2 = mid.next;
mid.next = null;
// 下部分链表 反转
l2 = myReverse(l2);
// 上下两部分链表合并
mergeLinked(l1,l2);
}
public static void mergeLinked(ListNode l1,ListNode l2){
ListNode l1_tmp = null;// 用来记录 l1 的 next
ListNode l2_tmp = null;// 用来记录 l2 的 next
while(l1!=null && l2 != null){
l1_tmp = l1.next;
l2_tmp = l2.next;
l1.next = l2;
l1 = l1_tmp;
l2.next = l1;
l2 = l2_tmp;
}
}
public static ListNode myReverse(ListNode head){
ListNode prev = null;
ListNode cur = head;
while(cur!=null){
ListNode curNext = cur.next;
cur.next = prev;
prev = cur;
cur = curNext;
}
retur

最低0.47元/天 解锁文章
1万+





