反转单向链表
思路
- 定义三个指针p1,p2,p3分别指向要反转节点的上一个节点,要反转的节点,下一次反转的节点
- 先将链表头结点的next指针置空
- 保留p3指针(因为在反转的过程中p2->next会丢失)
- 将p2进行反转
- p1 = p2,p2 = p3;
- 进行循环反转即可,直到链表结束
- 最后要将链表的head指针指向p1(此时的p1就是链表的头结点)
代码如下
//反转链表
void reverse(List* list)
{
if(NULL == list->head) return;
if(NULL == list->head->next) return;
Node* p1 = list->head;
Node* p2 = p1->next;
Node* p3 = NULL;
p1->next = NULL;
while(p2)
{
p3 = p2->next;//保存下个节点地址
p2->next = p1;//反转
//下一轮操作
p1 = p2;
p2 = p3;
}
list->head = p1;//头
}