提问人: 提问时间:11/5/2023 更新时间:11/5/2023 访问量:78
更改列表 C++ 的顺序
altering order of list c++
问:
如果我定义了一个项目列表,并且我想更改或更改所选项目之一在列表中的顺序,我该如何实现?
函数的定义应如下:
items* shift_back(item* head, int i){
....
....
}
答:
1赞
H.S.
11/5/2023
#1
假设这是您的列表:
+-----+ +-----+ +-----+ +-----+ +-----+
|11| -|->|22| -|->|33| -|->|44| -|->|55| -|->nullptr
+-----+ +-----+ +-----+ +-----+ +-----+
1 2 3 4 5 [k represents position of a node]
如果的值为 is(即向上移动 nd 节点),那么您只需要有关其上一个节点的信息,该节点是第一个节点,在向上移动 nd 节点后,它将成为第一个节点。
k
2
2
2
[k - 1] -> [k] -> [k + 1] -> [k + 1] -> ..... ------- | | +- This node next pointer need to set to [k - 1] +- This node next pointer need to set to [k + 1] // after moving up kth position node [k] -> [k - 1] -> [k + 1] -> [k + 1] -> ..... example [k = 2]: +-----+ +-----+ +-----+ +-----+ +-----+ |22| -|->|11| -|->|33| -|->|44| -|->|55| -|->nullptr +-----+ +-----+ +-----+ +-----+ +-----+
如果的值大于(nd node 之后的任何节点),则需要有关位置 节点的前两个节点的信息。
k
2
2
k
[k - 3] -> [k - 2] -> [k - 1] -> [k] -> [k + 1] -> [k + 1] -> ..... ------- ------- | | | +- This node next pointer need to set to [k - 1] | +- This node next pointer need to set to [k + 1] +- This node next pointer need to set to [k] // after moving up kth position node up [k - 3] -> [k - 2] -> [k] -> [k - 1] -> [k + 1] -> [k + 1] -> ..... example [k = 4]: +-----+ +-----+ +-----+ +-----+ +-----+ |11| -|->|22| -|->|44| -|->|33| -|->|55| -|->nullptr +-----+ +-----+ +-----+ +-----+ +-----+
如果 的值小于或等于或超出列表长度的任何值,则列表应保持不变。
k
1
牢记以上几点,您可以执行以下操作:
consumer* move_up (consumer* head, int k) {
consumer* ll = head;
consumer* prev = nullptr;
for (int i = 1; (i < k - 1) && (ll != nullptr); ++i) {
prev = ll;
ll = ll->next;
}
if ((k > 1) && (ll != nullptr) && (ll->next != nullptr)) {
consumer* x = ll->next;
ll->next = ll->next->next;
x->next = ll;
ll = x;
}
if (prev != nullptr) {
prev->next = ll;
ll = head;
}
return ll;
}
几点建议:
评论
if(k == 1 && prevCons != nullptr)
prevCons != nullptr
{}
;
for
if