vector存储地址重排法

重排链表

http://www.nowcoder.com/questionTerminal/3d281dc0b3704347846a110bf561ef6b

在不改变链表内部值的情况下完成链表的重排,不知道我的方法是否符合题意,先将所有链表的地址从头到尾保存起来,然后用两个下标向中间靠拢重新排列,希望有大佬指正

class Solution {
public:
    void reorderList(ListNode *head) {
        if (!head)
            return;
        vector<ListNode*> v;
        ListNode *tmp = head;
        ListNode *left, *right;
        int l, r;

        while (tmp != NULL) {
            v.push_back(tmp);
            tmp = tmp->next;
        }

        l = 0; r = v.size() - 1;
        tmp = head;
        while (l < r) {
            left = v[l++]; right = v[r--];
            if (tmp == head) {
                tmp->next = right;
                tmp = tmp->next;
            }
            else {
                tmp->next = left;    tmp = tmp->next;
                tmp->next = right;    tmp = tmp->next;
            }
        }
        if (l == r) {
            tmp->next = v[l];    tmp = tmp->next;
        }
        tmp->next = NULL;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
鼗:四级有点难绷,感觉能拿国家励志奖学金,学习能力应该蛮强的,四级确实不重要,但是拿这个卡你可是很恶心啊
点赞 评论 收藏
分享
头像
昨天 15:46
已编辑
中南大学 后端
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务