反转链表
输入一个链表,反转链表后,输出新链表的表头。
思路:首先将原链表的第一个节点变成了新链表的最后一个节点,同时将原链表的第二个节点保存在cur中。循环反转,就是从原链表的第二个节点开始遍历到最后一个节点,将所有节点翻转一遍
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if pHead is None:
return None
pre = pHead
cur = pHead.next #保存第二个节点
pre.next = None #首节点变为最后一个节点
while cur: #反转
temp = cur.next #第三个节点
cur.next = pre #
pre = cur
cur = temp
return pre
方法二
# -*- coding:utf-8 -*-
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# 返回ListNode
def ReverseList(self, pHead):
# write code here
if pHead is None:
return pHead
last = None #指向上一个节点
while pHead:
# 先用tmp保存pHead的下一个节点的信息,
# 保证单链表不会因为失去pHead节点的next而就此断裂
tmp = pHead.next
# 保存完next,就可以让pHead的next指向last了
pHead.next = last
# 让last,pHead依次向后移动一个节点,继续下一次的指针反转
last = pHead
pHead = tmp
return last
总结:注意题干要求,灵活利用链表基本删减替换等属性操作。
掌握对next域的赋值,保存当前节点的下一个节点,并使当前节点指向最后一个节点。
然后使最后节点指向当前节点,把下一个节点赋予当前节点进行遍历,实现反转。