思路:
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; } }