【初级算法】反转链表 2021.10.1

【题目】反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:


输入:head = [1,2]
输出:[2,1]
示例 3:

输入:head = []
输出:[]
 

提示:

链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
 

进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnnhm6/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.0 自己做:

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, val=0, next=None):
 4 #         self.val = val
 5 #         self.next = next
 6 class Solution:
 7     def reverseList(self, head: ListNode) -> ListNode:
 8         if head == []:
 9             return head
10         if len(head)%2 == 0:
11             length = len(head)/2
12         else:
13             length = (len(head)+1)/2
14         for i in range(int(length)):
15             head[i], head[-i-1] = head[-i-1], head[i]
16         return head

 

 感觉自己做成了数组,不懂链表啊......

 

Python 数据结构之链表:https://zhuanlan.zhihu.com/p/60057180

 

2.0 常规算法

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, val=0, next=None):
 4 #         self.val = val
 5 #         self.next = next
 6 class Solution:
 7     def reverseList(self, head: ListNode) -> ListNode:
 8         valList = []
 9         pointer = head
10         while pointer:
11             valList.append(pointer.val)
12             pointer = pointer.next
13         pointer = head
14         while valList:
15             pointer.val = valList.pop()
16             pointer = pointer.next
17         return head

 

 

 

2.1 进阶算法

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, val=0, next=None):
 4 #         self.val = val
 5 #         self.next = next
 6 class Solution:
 7     def reverseList(self, head: ListNode) -> ListNode:
 8         if head == None:
 9             return None
10         left = right = head
11         if right.next == None:
12             return head
13         else:
14             right = right.next
15             left.next = None
16         while right != None:
17             head = right
18             right = right.next
19             head.next = left
20             left = head
21         return head

 

 

不是很懂

 

 

3.1 学习(来源力扣评论区)

 

 1 # Definition for singly-linked list.
 2 # class ListNode:
 3 #     def __init__(self, x):
 4 #         self.val = x
 5 #         self.next = None
 6 
 7 class Solution:
 8     def reverseList(self, head):
 9         """
10         :type head: ListNode
11         :rtype: ListNode
12         """
13         p, rev = head, None
14         while p:
15             rev, rev.next, p = p, rev, p.next
16         return rev

关于Python 的“多元”赋值:https://blog.csdn.net/leacock1991/article/details/101467111

 

posted @ 2021-10-01 08:50  阿吽  阅读(33)  评论(0)    收藏  举报