使用递归的方法将链表逆置:关键是将当前逆置节点之后的子链当做一个已逆置好的链表,看做是一个整体。
typedef struct _node
{
int data;
struct _node *next;
}node, *list;
list reverse_list(list l)
{
if(!l || !l->next)
return l;
list n = reverse_list(l->next);//逆置完之后,l->next成了尾结点,返回的n是头结点
l->next->next = l;//这一步,实际上是l->next是倒数第二个结点,l本身是尾结点
l->next=null;//因为l是尾结点,所以l->next赋值为NULL
return n;//把头结点返回。
}