反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路:设置多个结点,向前逐步推进
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *p;
ListNode *r;
p=head;
r=NULL;
while(p!=NULL)
{
ListNode *q=p->next;/*原来在考虑会不会出现指向NULL的下一个这种情况,
仔细想想是不会的,虽然整体上会出现三个不同位置的指针,但在每次循环结束时,
q,p应该是相同的*/
p->next=r;
r=p;
p=q;
}
return r;//此时p为NULL,返回r
}
};