反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
分析
确保代码的鲁棒性
链表的熟练程度
指针
题解
struct ListNode* reverseList(struct ListNode* head){
// 确保代码的鲁棒性
if(head == NULL)
return NULL;
// 1.只有一个节点
if(head->next == NULL){
return head;
}
// 2. 拥有两个以上的节点
struct ListNode *q,*r, *p;
// 初始化q
// 初始化r,p
q = head;
r = head->next;
p = r->next;
q->next = NULL;
// 如果此时的p是空
while(p){
r->next = q;
q = r;
r = p;
p = p->next;
}
r->next = q;
return r;
}