python数据结构之翻转链表

翻转一个链表

样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

一种比较简单的方法是用“摘除法”。就是先新建一个空节点,然后遍历整个链表,依次令遍历到的节点指向新建链表的头节点。

那样例来说,步骤是这样的:

1. 新建空节点:none2. 1->none3. 2->1->none4. 3->2->1->none

代码就非常简单了:

“””
definition of listnode
class listnode(object):
def __init__(self, val, next=none):
self.val = val
self.next = next
“””
class solution:
“””
@param head: the first node of the linked list.
@return: you should return the head of the reversed linked list.
reverse it in-place.
“””
def reverse(self, head):
temp = none
while head:
cur = head.next
head.next = temp
temp = head
head = cur
return temp
# write your code here

当然,还有一种稍微难度大一点的解法。我们可以对链表中节点依次摘链和链接的方法写出原地翻转的代码:

“””
definition of listnode
class listnode(object):
def __init__(self, val, next=none):
self.val = val
self.next = next
“””
class solution:
“””
@param head: the first node of the linked list.
@return: you should return the head of the reversed linked list.
reverse it in-place.
“””
def reverse(self, head):
if head is none:
return head
dummy = listnode(-1)
dummy.next = head
pre, cur = head, head.next
while cur:
temp = cur
# 把摘链的地方连起来
pre.next = cur.next
cur = pre.next
temp.next = dummy.next
dummy.next = temp
return dummy.next
# write your code here

需要注意的是,做摘链的时候,不要忘了把摘除的地方再连起来

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多python数据结构之翻转链表相关文章请关注php中文网!

Posted in 未分类

发表评论