题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
解题思路:定义两个指针:(1) pre 和 cur;preprepre 在前 curcurcur 在后。(2)每次让 pre 的 next 指向 cur ,实现一次局部反转。(3)局部反转完成之后, pre 和 cur 同时往前移动一个位置循环上述过程,直至 pre 到达链表尾部。
代码:
/**
* 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*cur=NULL,*pre=head;
while(pre != NULL){
ListNode*t=pre->next;
pre->next=cur;
cur=pre;
pre=t;
}
return cur;
}
};