LeetCode 143 Reorder List Add to List

来源:互联网 发布:php api接口开发 json 编辑:程序博客网 时间:2024/05/16 16:12

题目:

Given a singly linked list L: L0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-2→…

You must do this in-place without altering the nodes' values.

For example,
Given {1,2,3,4}, reorder it to {1,4,2,3}.


想法:将后半段倒序后,插入前半段

代码(c):

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */void reorderList(struct ListNode* head) {        struct ListNode* mid_head ;        struct ListNode* cur_ptr,*pre_ptr;        int i,length;                mid_head = (struct ListNode *)malloc(sizeof(struct ListNode));        mid_head->val = 0;        mid_head->next = NULL;                if(head != NULL)        {           length = 0;            cur_ptr = head;            while(cur_ptr!=NULL)            {                length++;                cur_ptr = cur_ptr->next;            }            for(i = 0, pre_ptr = cur_ptr = head; i<length;i++)            {                if(i>length/2&&cur_ptr!=NULL)                {                    pre_ptr->next = cur_ptr->next;                    cur_ptr->next = mid_head->next;                    mid_head->next = cur_ptr;                    cur_ptr = pre_ptr->next;                }                else                {                    pre_ptr = cur_ptr;                    cur_ptr = cur_ptr->next;                }            }            pre_ptr = head;            cur_ptr = mid_head->next;             while(cur_ptr!=NULL)            {                mid_head->next = cur_ptr->next;                cur_ptr->next = pre_ptr->next;                pre_ptr->next = cur_ptr;                pre_ptr = cur_ptr->next;                cur_ptr = mid_head->next;            }        }}

Runtime:16ms

0 0