这里先举一个例子
原链表:
反转后
观察可以发现,如果要进行反转链表的话,我们进行的操作是
- 第一个节点的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