这里先举一个例子
原链表:
反转后
观察可以发现,如果要进行反转链表的话,我们进行的操作是
- 第一个节点的next指针指向空
- 从第二个节点到最后一个节点,把每一个节点的next指针指向前一个节点。
- 把head指针指向最后一个节点
不过这里还有一个细节,我们来看第一步,把第一个节点的next指针指向空,但是指完了以后我们发现出现了问题。现在指向第二个节点6的指针断了。这样的话,之后的节点我们就都找不到了。
所以,在把一个节点的next指针指向其它结点之前,我们要先记录一下它的下一个结点。
c++
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* Pre = NULL;
ListNode* Now = pHead;
ListNode* Next = NULL;
while(Now != NULL){
Next = Now->next;
Now->next = Pre;
Pre = Now;
Now = Next;
}
pHead = Pre;
return pHead;
}
};
java
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode Pre = null;
ListNode Now = head;
ListNode Next = null;
while(Now != null){
Next = Now.next;
Now.next = Pre;
Pre = Now;
Now = Next;
}
head = Pre;
return head;
}
}
python
class Solution:
def ReverseList(self, pHead):
Pre = None
Now = pHead
Next = None
while Now != None:
Next = Now.next
Now.next = Pre
Pre = Now
Now = Next
pHead = Pre
return pHead

京公网安备 11010502036488号