Skip to content
On this page

d59_q3_list_split.cpp

cpp
#pragma region student.h
#ifndef __STUDENT_H_
#define __STUDENT_H_

template <typename T>
CP::list<T> CP::list<T>::split(iterator it, size_t pos) {
    // write your code here
    CP::list<T> result;

    if (it == this->end()) {
        return result;
    }

    if (it == this->begin()) {
        result.mHeader = this->mHeader;
        result.mSize = this->mSize;

        this->mHeader = new node();
        this->mSize = 0;

        return result;
    }

    // Config mHeader of new list
    result.mHeader = new node(T(), this->mHeader->prev, it.ptr);
    result.mHeader->prev->next = result.mHeader;
    result.mSize = this->mSize - pos;
    const auto endOfSplited = it.ptr->prev;
    it.ptr->prev = result.mHeader;

    // Config mHeader of original list
    this->mSize = pos;
    this->mHeader->prev = endOfSplited;
    endOfSplited->next = this->mHeader;

    return result;
}

#endif
#pragma endregion student.h

See on GitHub

Last Updated: 15/1/2567 13:25:21 (UTC+7)

Released under the MIT License