这里先举一个例子
原链表:

反转后

观察可以发现,如果要进行反转链表的话,我们进行的操作是

  1. 第一个节点的next指针指向空
  2. 从第二个节点到最后一个节点,把每一个节点的next指针指向前一个节点。
  3. 把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