题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
定义指针变量p,q,r,初始化p=pHead指向函数参数指针头部,q=p->next指向p的下一个结点,r=q->next指向q的下一个结点,因为反转后头变成尾,所以指向头部的指针p的next赋值为空,之后执行循环,每次将中间结点q的next指向p,然后p,q,r向后挪一个位置,重复这个步骤直到r指针为空时跳出循环,此时得到的q指针即为反转后的链表头部
class Solution { public: ListNode* ReverseList(ListNode* pHead) { ListNode* p=(ListNode*)malloc(sizeof(ListNode)); ListNode* q=(ListNode*)malloc(sizeof(ListNode)); ListNode* r=(ListNode*)malloc(sizeof(ListNode)); if(pHead==NULL) return NULL; if(pHead->next == NULL) return pHead; p=pHead; q=p->next; p->next=NULL; r=q->next; while(true){ q->next=p; if(r==NULL) break; p=q; q=r; r=r->next; } return q; } };