我正在编写一个函数,该函数采用链表将元素反转到位,然后打印结果。当我运行它时,我无法让它正常工作;它只打印第一个值。
typedef struct node {
ElemType val;
struct node *next;
} NODE;
struct list_struct {
NODE *front;
NODE *back;
};
//reverse elements in list
void lst_reverse(LIST *l) {
NODE *p = l->front;
NODE *prev = NULL;
NODE *current = p;
NODE *next;
while (current != NULL) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
p = prev;
lst_print(l);
}
作业p = prev
不会更新LIST
中的前指针。当您调用lst_print(l)
时,您是从列表的旧前面开始的,即新的后面,因此它在单次迭代后会停止的原因。
相反,您应该使用以下内容更新列表的正面(和背面):
l->front = prev;
l->back = p;