思路:
1.快慢指针找到中间节点
2.翻转后半部分链表
3.遍历前半部分链表,将后半部分链表插入前半部分间隙中
if(head==null || head.next==null)return;
ListNode r = head;
ListNode fast = head;
ListNode slow = head;
//快慢指针找到中间节点
while (fast!=null && fast.next!=null){
fast = fast.next.next;
slow = slow.next;
}
//r2为中间节点 head为前半部分头部节点
ListNode r2 = slow.next;
slow.next = null;//后半部分赋值为null
//翻转后半部分链表
ListNode pre = null,cur=r2;
while (cur!=null){
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
//后半部分链表r2 插入到前半部分head链表中
while (pre!=null){
ListNode temp = head.next;
head.next = pre;
pre = pre.next;
head.next.next = temp;
head = head.next.next;
}
}