第一种方法,非递归
list_node* reverse(list_node* list)
{
assert(list);
if (NULL == list->next)
{
return list;
}
list_node* new_head = NULL; //用作返回值的头结点
list_node* cur = list; //当前结点
list_node* next = cur->next;
new_head = cur;
cur = next; //这里要注意这个置空的顺序,一定要在 head = head->next 后面置空,不然影响前面的变量
new_head->next = NULL; //第一个节点,也就是逆置后的最后一个结点,要把next置空
while (cur != NULL)
{
next = cur->next;
cur->next = new_head;
new_head = cur;
cur = next;
}
return new_head;
//或者不使用返回值,上面传参的时候,使用引用, list = new_head;
}
第二种方法,递归遍历
递归遍历的思想:就是使用栈的思想 先把头结点入栈,接着头结点的下一个结点入栈,直到尾结点位置, 接着依次把栈内的元素出栈,并更换其下一个结点对应的对象;