题目:
输入一个链表,反转链表后,输出新链表的表头。
解题思路:
题目不难,但关键是要理清思路,否则很容易在很多小地方出错。
这道题目我们的总体思路就是正向读链表,逆向插链表。我们需要三个变量:
1)首先,我们将当前节点的下一个节点存储起来。(q)
2)设置一个为空的头节点(mHead)来存储逆序的链表,让当前节点(pHead)的next指向头节点,然后当前节点成为头节点。
3)让下一个节点成为当前节点。通过前面存储的结点q,就可找到当前节点的下一个节点。
重复上述过程,直到当前节点为空。
代码:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == NULL ){
return NULL;
}
ListNode* mHead = NULL; //逆序的头指针
ListNode* q = NULL; //存储正序下一个结点
while(pHead!=NULL){ //pHead表示当前结点
q = pHead->next;
pHead->next = mHead;
mHead = pHead;
pHead = q;
}
return mHead;
}
};