leetcode 143. 重排链表

这题上次交不知道出了什么问题,居然不出结果(当时停电了)。

早上起来重写了一下,发现并没有问题呀,直接只用STL大法,上list就完事了要记住list的insert方法和earse方法都是有返回值的返回的是一个指向链表元素的迭代器,insert指向的是插入节点,earse指向的是删除节点的下一个节点,否则是没有办法遍历的哦,各种bug。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    void reorderList(ListNode* head) {
        list<int> lst;
        int level=0;
        ListNode* tmp=head;
        while (tmp) {
            lst.push_back(tmp->val);
            level++;
            tmp=tmp->next;
        }
        if (level%2==1) {
            level/=2;
        }
        else {
            level=(level-2)/2;
        }
        list<int>::iterator it=lst.begin();
        int cnt=0;
        while (it!=lst.end()) {
            if (cnt==level) break;
            it=lst.insert(++it,lst.back());
            lst.pop_back();
            it++;
            cnt++;
        }
        it=lst.begin();
        while (it!=lst.end()) {
            head->val=*it;
            head=head->next;
            ++it;
        }
    }
};

  

原文地址:https://www.cnblogs.com/xyqxyq/p/12235481.html