143. Reorder List

来源:互联网 发布:mac 查看硬盘内存 编辑:程序博客网 时间:2024/06/01 20:19
/**算法思想是:先将链表拆成两部分,然后逆转后面的一部分,最后合并两个部分得到最终的结果链表 * 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;}    }};

原创粉丝点击