leetcode Reorder List

来源:互联网 发布:office2011for mac 编辑:程序博客网 时间:2024/05/22 18:55

本题的思路:

1.将原链表从中间分成两个链表A,B。

2.逆置B,此处可根据逆序伐穿件链表来做。

3.然后针对每个元素依次合并A,B。


代码

ListNode*  reverseList(ListNode*head){ListNode* p, *headtemp;p = head;headtemp = new ListNode(0);while(p!=NULL){ListNode * q;q = p; p = p->next;q->next = headtemp->next;headtemp->next = q;}return headtemp->next;}ListNode * mergeLists(ListNode *head1, ListNode *head2){ListNode *pnext1, *pnext2, *p, *q;pnext1 = head1;pnext2 = head2;q = new ListNode(0);p = q;while(pnext1!=NULL&&pnext2!=NULL){p ->next = pnext1;pnext1 = pnext1->next;p = p->next;p->next = pnext2;pnext2 = pnext2->next;p = p->next;}if(pnext1!=NULL)p->next = pnext1;if(pnext2!=NULL)p->next = pnext2;return q->next;}ListNode* reorderList(ListNode *head){if(head==NULL)return ;ListNode *fast, *slow, *last;slow = head;fast = head;while(slow->next!=NULL&&fast->next!=NULL&&fast->next->next!=NULL){slow = slow->next;fast = fast->next->next;}ListNode * head2;head2 = slow->next;slow->next = NULL;//反转后半部分链表head2 = reverseList(head2);//合并两个链表head = mergeLists(head, head2);}


0 0