头结点不动,将节点1的next指针赋值为NULL,将链表打断;每次将后一节点放到最前面,头结点先不和后续节点连接,最后将头结点与原链表的最后一个节点连接。
步骤:
typedef struct Link{
int elem;
struct Link *next;
}link;
link* ListReverse(link* const head)
{
//链表仅有一个节点,无须逆序
if( NULL == head || NULL == head->next) return head;
link* current = head->next;//第一个节点
link* prev = NULL;
link* pnext = current ->next;//此时指向第二个节点
current ->next = NULL;//将链表从第一个节点打断
while(pnext)
{
prev = pnext->next;
pnext->next = current;
current = pnext;
pnext = prev;//如果写成pnext = pnext->next是不行的,应为pnext->next 在前面被改变了
}
head->next = current;
return head;
}