题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
struct ListNode* ReverseList(struct ListNode* pHead ) {
if(pHead==NULL) //一定要先检查是不是空指针
{
return NULL;
}
else if(pHead->next==NULL) //再检查是不是单个节点的指针,顺序不能错
{
return pHead;
}
else //再进行下面的操作否则会涉嫌访问非法内存
{
struct ListNode *p=pHead; //拿到头节点
struct ListNode *q=p->next; //拿到第二个节点
p->next=NULL; //将第一个节点p与第二个节点断开
while(q!=NULL)
{
p=q; //将第二个节点拷贝给p
q=q->next; //q(原第二个节点)继续遍历
p->next=pHead; //拷贝后的p的指针指向头节点
pHead=p; //将头节点不停往后移动
}
return p; //最后导致尾节点变为头节点,实现链表反转
}
}
查看5道真题和解析