Reorder List 重排字符串

来源:互联网 发布:詹姆斯09年对魔术数据 编辑:程序博客网 时间:2024/06/06 14:58

题目:

链接

解法1:

先求出字符串长度,然后依次把后面的字符串插入到前面中。

超时。

代码:

 struct ListNode {     int val;     ListNode *next;     ListNode(int x) : val(x), next(NULL) {} };class Solution {public:void reorderList(ListNode *head) {if (head == NULL)return ;ListNode *temp = head->next;ListNode *last = head;int n = 0;while (temp){++n;temp = temp->next;}ListNode *now = head;while (n > 1){int i = n;temp = now;while (i){last = temp;temp = temp->next;--i;}last->next = NULL;temp->next = now->next;now->next = temp;now = temp->next;n -= 2;}}};

解法2:

先将字符串分为等两段。

逆序后一段。

合并两段。


代码:

class Solution {public:void reorderList(ListNode *head) {if (head == NULL)return ;int len = 0;ListNode *temp = head;while (temp){++len;temp = temp->next;}int half = len - len / 2;temp = head;while (half != 1){--half;temp = temp->next;}ListNode *head2 = temp->next;temp->next = NULL;if (head2 == NULL)return;ListNode *cur = head2->next;head2->next = NULL;ListNode *post = head2;while (cur){temp = cur->next;cur->next = post;post = cur;cur = temp;}head2 = post;cur = head;while (head2){temp = head2->next;head2->next = cur->next;cur->next = head2;cur = head2->next;head2 = temp;}}};



0 0
原创粉丝点击