LeetCode-143. 重排链表【栈 递归 链表 双指针】

题目描述:

给定一个单链表 L 的头节点 head ,单链表 L 表示为:

L0 → L1 → … → Ln - 1 → Ln
请将其重新排列后变为:

L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例 1:
在这里插入图片描述
输入:head = [1,2,3,4]
输出:[1,4,2,3]
示例 2:

在这里插入图片描述
输入:head = [1,2,3,4,5]
输出:[1,5,2,4,3]

提示:

链表的长度范围为 [1, 5 * 104]
1 <= node.val <= 1000

解题思路一:找到中点,翻转后半段链表。然后依次改变指针顺序即可。

问:循环条件 while head2.next 为什么不能写成 while head2?

答:如果链表长度为偶数,例如链表由 [1,2,3,4]四个节点组成,那么找中间节点并反转后,我们得到的两个链表分别为 head=[1,2,3] 和 head2=[4,3]。注意它俩都包含节点 3。如果写成 while head2,会导致最后一轮循环中 3 指向它自己。

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def middleNode(self, head: Optional[ListNode]) -> None:
        slow, fast = head, head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        return slow
    
    def reverseList(self, head: Optional[ListNode]) -> None:
        pre, cur = None, head
        while cur:
            tmp = cur.next
            cur.next = pre
            pre = cur
            cur = tmp
        return pre
        
    def reorderList(self, head: Optional[ListNode]) -> None:
        mid = self.middleNode(head)
        head2 = self.reverseList(mid)
        # copy_head = head
        while head2.next:
            tmp1 = head.next
            tmp2 = head2.next
            head.next = head2
            head2.next = tmp1
            head = tmp1
            head2 = tmp2
        # print(copy_head) 最终只需地址对应即可

时间复杂度:O(n)
空间复杂度:O(1)

解题思路二:0


时间复杂度:O(n)
空间复杂度:O(n)

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)

相关推荐

  1. Golang leetcode206 翻转 迭代 指针

    2024-04-13 22:44:01       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-13 22:44:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-13 22:44:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-13 22:44:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-13 22:44:01       20 阅读

热门阅读

  1. 设计模式-里氏替换原则

    2024-04-13 22:44:01       16 阅读
  2. PyTorch 中的【高级索引】 或 【花式索引】

    2024-04-13 22:44:01       16 阅读
  3. 【图论】链式前向星实现图的BFS搜索

    2024-04-13 22:44:01       12 阅读
  4. Soulver v3.10.3.1 mac版 智能文本计算器 兼容 M1/M2/M3

    2024-04-13 22:44:01       21 阅读
  5. Ant Design Vue Table 自定义渲染与自定义单元格

    2024-04-13 22:44:01       13 阅读
  6. 【LeetCode刷题记录】76. 最小覆盖子串

    2024-04-13 22:44:01       10 阅读
  7. dfs板子

    dfs板子

    2024-04-13 22:44:01      11 阅读
  8. 蓝桥杯 2021 省 AB 2 洛谷P8755 负载均衡

    2024-04-13 22:44:01       16 阅读
  9. Linux防止暴力破解密码脚本

    2024-04-13 22:44:01       13 阅读
  10. mysql百万数据深分页问题

    2024-04-13 22:44:01       19 阅读