题目:输入一个链表,反转链表后,输出链表的所有元素。
思路1:用列表保存链表中的所有元素,然后将其进行反转,新建链表后挨个将反转后的列表元素放入进去
思路2:为了反转一个链表,需要调整链表中指针的方向。为了调整结点i的下一个指针,除了需要知道结点i本身之外,还需要i之前的一个结点h,因为我们需要把结点i的下一个指针指向前结点h。同时我们还需要实现保存i的一个结点j,以防止链表断开。因此相应的,我们需要定义3个指针,分别指向当前结点,前结点,下一节点。
Python代码如下:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
# 返回ListNode
def ReverseList_v1(self, pHead):
# write code here
if not pHead:
return None
if not pHead.next:
return pHead
ls = []
while pHead.next:
ls.append(pHead.val)
pHead = pHead.next
ls.append(pHead.val)
ls = ls[::-1]
res = left = ListNode(ls[0])
for item in ls[1:]:
left.next = ListNode(item)
left = left.next
return res
def ReverseList_v2(self, pHead):
pReversedHead = None
pNode = pHead
pPrev = None
while pNode != None:
pNext = pNode.next
if pNext == None:
pReversedHead = pNode
pNode.next = pPrev
pPrev = pNode
pNode = pNext
return pReversedHead
# 递归实现反转链表
def ReverseListRec(self, pHead):
if not pHead or not pHead.next:
return pHead
else:
pReversedHead = self.ReverseList(pHead.next)
pHead.next.next = pHead
pHead.next = None
return pReversedHead
node1 = ListNode(10)
node2 = ListNode(11)
node3 = ListNode(13)
node1.next = node2
node2.next = node3
S = Solution()
p = S.ReverseList(node1)
print(p.next.val)