/**算法思想是:先将链表拆成两部分,然后逆转后面的一部分,最后合并两个部分得到最终的结果链表
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void reverseList(ListNode *&head)//链表的逆转
{
if (head == NULL)
return ;
ListNode*p = NULL,*s=NULL;
while (head ->next!= NULL)
{
s = head->next;
head->next = p;
p = head;
head = s;
}
head->next = p;
}
void reorderList(ListNode* head)
{
if (head == NULL || head->next == NULL || head->next->next == NULL)
return;
ListNode *p = head, *q = head;
//拆链表
while (p && q && q->next && q->next->next)
{
p = p->next;
q = q->next->next;
}
ListNode*s = p->next,*m=NULL;//第二部分的首结点;
p->next = NULL;//截断第一部分;
reverseList(s);//链表逆转
//合并链表
p = head;
while (p != NULL&&s != NULL)
{
m = p->next;
q = s->next;
p->next = s;
s->next = m;
p = m;
s = q;
}
}
};
143. Reorder List
最新推荐文章于 2025-05-08 14:20:07 发布