206. 反转链表(Reverse Linked List)
C语言实现
Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *p = head, *q, *mid;
/*一开始我对q和mid都赋值了,于是出现了runtime error: member access within null pointer of type 'struct ListNode'错误。在未确认p是否为空指针前不要对q赋p->next,在未确定q是否为空指针前,不要对mid赋q->next*/
if(head == NULL)
return NULL;
q = p->next;
while(q != NULL){
mid = q->next;
q->next = p;
p = q;
/*开始我写p = p->next,实际上如果这样进行**第二次循环**时,p->next就**指向原来的p**了,就无效了,而将p = q,在后面对q赋值为mid,这样就防止出现这个问题*/
q = mid;//注意赋值循序
}
head -> next = NULL;
return p;
}