使用指针扭转列表的元素
Reverse the elements of a list using pointers
可能的重复:
如何向后阅读单一链接列表?
反向链接清单C
我如何不使用arrays
reverse
连接的list
的元素(我必须只使用指针这就是我的问题)。
您无需交换节点 content 或堆栈。如果您想扭转单连接的列表,只需在迭代循环中的中间指针上使用一对指针加上指针。完成后,不要忘记更新头指针;
void reverse_list(node **head)
{
node *cur=NULL, *nxt=NULL;
if (!(head || *head || (*head)->next))
return;
nxt = *head;
while (nxt != NULL)
{
node *prv = cur;
cur = nxt;
nxt = nxt->next;
cur->next = prv;
}
*head = cur;
}
假设列表节点是这样的:
typedef struct node
{
..data..
struct node *next;
} node;
并且它是正确管理的,然后您将其调用:
node *head = NULL;
...fill the list...
reverse_list(&head);
将列表视为堆栈,将元素弹出并将其推入新列表。
收集一个名为 lst
的列表,该列表使我们能够向后移动,即 doubly linked list
您可以通过简单地交换开始的内容和结尾节点
来逆转列表lst
void reverse(lst *beg,lst *end)
{
lst temp;
while(beg!=end)
{
//swap the content of the nodes
*temp=*beg;
*beg=*end;
*end=*temp;
beg=beg->Next();//move to next node
end=end->prev();//move to previous node
}
}
或
如果是singly linked list
,则可以使用stack
void reverse(lst* beg)
{
stack<lst*> stc;
lst* temp=beg;
lst* temp1=beg;
while(temp)//store pointers to lst nodes in stack
{
stc.push(temp);
temp=temp.Next();
}
while(temp1)//pop the stack by inserting it into list from beginning
{
*temp1=*stc.top();
temp1=temp1.Next();
stc.pop();
}
}
相关文章:
- C++如何通过用户输入删除列表元素
- 通过动态分配插入列表元素
- 用于编织链接列表元素的Runner Technique
- 无法在C 中删除列表元素
- 如何在不使用循环或迭代器的情况下检查所有列表元素并在满足条件时删除一个
- 将列表元素移动到列表末尾的函数多次不起作用
- 交换链接列表元素
- 当删除列表元素时,在迭代器结束时会发生什么
- 为什么从不同分配器的列表中剪辑列表元素时会有错误消息?以及如何解决
- 打印出列表元素问题
- 我想通过递归获取列表元素的所有置换
- 从C++访问列表元素 (QML) 颜色
- 如何在C++visual studio 2013中将列表元素转换为文本块
- 指向删除后的列表元素的指针
- 正在将指针复制到assign运算符中的另一个列表元素
- 将列表元素插入向量,C++获取其他不需要的值
- 从unordered_set中删除列表元素
- 在C++中打印列表元素的组件
- 提取并转换 boost::p ython::list 的列表元素
- Rcpp犰狳:对列表元素的"-="操作