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.hSee on GitHub
Last Updated: 15/1/2567 13:25:21 (UTC+7)