输入一个链表,反转链表后,输出新链表的表头。
思路一:
- 借助列表,遍历节点存入列表
- 然后遍历列表中的节点,使右边一个节点指向左边一个节点
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def ReverseList(self, pHead):
# write code here
if pHead == None or pHead.next == None:
return pHead
nodeList = []
nodePointer = pHead
while nodePointer:
nodeList.append(nodePointer)
nodePointer = nodePointer.next
pHead.next = None
for i in range(len(nodeList)-1):
nodeList[i+1].next = nodeList[i]
return nodeList[-1]
思路二:
- 递归结束条件最后一个节点的next为空f返回该节点
- 递归过程使前一个指向后一个
- 最终把第二个节点指向第一个节点
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def ReverseList(self, pHead):
# write code here
if pHead == None or pHead.next == None:
return pHead
newHead = self.ReverseList(pHead.next)
pHead.next.next = pHead
pHead.next = None
return newHead
思路三:
- 定义三个指针leftPointer,midPointer,rightPointer
- 移动三个指针
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def ReverseList(self, pHead):
# write code here
if pHead == None or pHead.next == None:
return pHead
leftPointer = pHead
midPointer = pHead.next
rightPointer = midPointer.next
pHead.next = None
while rightPointer:
midPointer.next = leftPointer
leftPointer = midPointer
midPointer = rightPointer
rightPointer = rightPointer.next
midPointer.next = leftPointer
return midPointer