我必须编写一个函数来反转一个双向链表,以便尾部成为头部。反向双向链表
例如,之前的元素: {(1,1),(1,2),(2,2),(2,3)}
后: {(2,3) ,(2,2),(1,2),(1,1)}
这里的结构:
struct snake {
unsigned int i;
unsigned int j;
struct snake *next;
struct snake *prev;
};
这是函数prototipe我必须使用:
void snake_reverse(struct snake **s);
我想这样的事情和其他一些尝试
void snake_reverse(struct snake **s) {
struct snake *last, *tmp = NULL;
last = *s;
while (last != NULL)
{
tmp = last->prev;
last->prev = last->next;
last->next = tmp;
last = last->prev;
}
if(tmp != NULL)
*s = tmp->prev;
}
也试过这样:
while (last != NULL)
{
tmp = last->next;
last->next = last->prev;
last->prev = tmp;
last = tmp;
}
if(tmp != NULL)
*s = tmp;
,但他不工作。我几乎可以肯定我没有错。 列表的第一个 - > prev是NULL,列表的最后 - >下一个是NULL。
我没有得到任何错误或崩溃,但该函数的任务是通过反转所有元素并更改列表头来反转蛇的方向。 你能说这里有什么问题吗?
编辑:问题是在另一个程序模块不是由我做的。
无论如何,最好的解决方案是kmkaplan。谢谢大家
当你描述一个问题时,你不能说“它不工作”;如果你更精确一些,这会更好:这是我所做的,期望的输出是X,但我有Y(或者:有错误信息Z的崩溃)。也许实际的错误在于你测试你的功能的方式。 – coredump
另请参阅'last = last-> prev':是否有意义使用last = tmp? – coredump
@coredump对不起,如果我不能更具体,但这个功能被用作程序中的模块,我无法控制程序的其余部分。 无论如何,我没有任何错误或崩溃,但功能的任务是颠倒所有元素并改变列表的头部来颠倒蛇的方向。 last-> prev有last-> next的地址导致我们切换它们。 tmp has last-> prev。所以他们是不同的 – RUsl