题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if(pHead==NULL||pHead->next==NULL)//首先判断链表节点情况,空表或者只有一个节点时直接return pHead即可 return pHead; else if(pHead->next->next==NULL)//两个节点的话也很简单,不解释了 { ListNode *q=pHead; pHead=pHead->next; pHead->next=q; q->next=NULL; return pHead; } else//重点在于大于等于三个节点,此时定义两个前驱和后继指针q,p循环赋值即可改变原有链表指向 { ListNode *q=pHead; pHead=pHead->next; ListNode *p=pHead->next; q->next=NULL; while(p!=NULL) { pHead->next=q; q=pHead; pHead=p; p=p->next; } pHead->next=q; return pHead; } } };