206. Reverse Linked List
Difficulty: Easy
Reverse a singly linked list.
思路
为了反转链表,需要改变链表中指针的方向,使next指向前面一个结点。
每次调整一个结点,已调整的结点的下一结点为前面的结点。
假设需要调整结点i,调整结束后,i的next要指向它前面的结点h,且链表会在i和最初next指向的结点j之间断裂,为了防止无法遍历到j,需要在改变i的next之前将j保存下来。
因此,需要定义3个指针pNode,pPrev,pNext,分别指向当前遍历的结点、它的前一个结点和后一个结点。
代码
[C++]
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *pPrev = NULL;
ListNode *pNode = head;
ListNode *pNext = NULL;
while (pNode != NULL) {
pNext = pNode->next;
pNode->next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pPrev;
}
};