问题描述:
输入一个链表,反转链表后,输出新链表的表头。
解题思路:
反转的含义就是让链表中的每一个结点的next不再指向下一个结点的地址,而是指向上一个结点的地址。
方法一:
我们可以进行第一遍循环遍历链表,将地址指针存储到list当中。
遍历之后,此时p已经指向最后一个结点,此时再进行一次循环,将地址赋给每个next。
# -*- 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==None:
return None
p=pHead
address=[]
while p.next!=None:
address.append(p)
p=p.next
pHead=p
while len(address)!=0:
p.next=address[-1]
# print p.val
p=p.next
address.pop(-1)
p.next=None
return pHead
if __name__=="__main__":
a=Solution()
head=ListNode(0)
k=head
for i in range(1,10):
k.next = ListNode(i)
k=k.next
cur=a.ReverseList(head)
while cur!=None:
print cur.val
cur=cur.next
方法二:
第一步:我们使用一个next保存当前结点的下一个结点,此时pHead.next的值就可以指向前一个结点。
第二步:改变完当前结点的next,就需要往后移动一些。把当前结点pHead赋给pre,把下一结点next赋给pHead。
# -*- 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
pre=None
next=None
while pHead!=None:
next=pHead.next
pHead.next=pre
pre=pHead
pHead=next
return pre
if __name__=="__main__":
a=Solution()
head=ListNode(0)
k=head
for i in range(1,10):
k.next = ListNode(i)
k=k.next
cur=a.ReverseList(head)
while cur!=None:
print cur.val
cur=cur.next