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;
    }
};
全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务