题解 | #重排链表#
重排链表
https://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b
/***
*
递归思路:建立左右双指针,每次递归找到最后一个节点插入双指针中间,然后移动双指针
*
***/
void insertNode(struct ListNode *src, struct ListNode *dst)
{
src->next = dst->next;
dst->next = src;
}
void reorderList(struct ListNode* head ) {
if(!head || !head->next)
{
return;
}
struct ListNode *left = head;
struct ListNode *right = head->next;
struct ListNode *pre_end = head;
struct ListNode *end = pre_end->next;
while (pre_end->next->next) {
pre_end = pre_end->next;
end = pre_end->next;
}
if(left==pre_end || !end)
{
return;
}
insertNode(end, left);
pre_end->next = NULL;
left = right;
right = right->next;
reorderList(left);
}
