typedef struct LNode {
int data;
struct LNode *next;
}LNode;
LNode* reverse_linked_list(LNode *head) {
LNode *next = NULL;
LNode *prev = NULL;
while (head) {
next = head->next;
head->next = prev;
prev = head;
head= next;
}
return prev;
}
对于链表的很多操作,通常有一个默认心得“先后再前”,这里的逆序算法的核心while循环里面.:
“先后”
先修改与后继相关的指针
第一步:保存当前节点的next指针
第二步:修改当前节点的next指针(指向前一个节点)
“再前”
再修改与前继相关的指针
第三步:prev指针向后移动
第四步:head向后移动