您的位置:首页 > 其它

LeetCode: Reorder List

2014-04-17 10:11 447 查看
思路:先逆序排列,然后再利用两个索引指针依次跳跃两个链表链接。(算法实现出来的时间太慢,以后要加强速度,还有小bug的调试能力也比较弱)

class Solution {
public:
void reorderList(ListNode *&head) {
if(head){
//先备份
ListNode *p, *q, *t;
ListNode *h = new ListNode(head->val);
p = head;
q = h;
int len = 1;
while(p->next){
ListNode *temp = new ListNode(p->next->val);
p = p->next;
q->next = temp;
q = q->next;
len++;
}
// 再倒序
p = t = head;
q = NULL;
while(p){
t = p;
p = p->next;
t->next = q;
q = t;
}
head = t;
// 将两个链表依次交叉连接
p = h;
q = head;
t = h;
int count = len/2;
while(count--){
t=t->next;
p->next = q;
q=q->next;
p=p->next;
p->next = t;
p=p->next;

}
p = h;
int k = 0;
while(p){
k++;
if(k==len){
p->next = NULL;break;
}
else
p=p->next;

}
head = h;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: