• 【LeetCode-86】分隔链表


    【题目描述】

    给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。

    你应当保留两个分区中每个节点的初始相对位置。

    示例:

    输入: head = 1->4->3->2->5->2, x = 3
    输出: 1->2->2->4->3->5

    【解答】

    # Definition for singly-linked list.
    # class ListNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    
    class Solution(object):
        def partition(self, head, x):
            """
            :type head: ListNode
            :type x: int
            :rtype: ListNode
            """
            # 判断为空或单节点
            if not head:
                return None
            if not head.next:
                return head
            
            # 新建头结点
            res=ListNode(-1)
            res.next=head
            # 双指针,一个遍历结点,一个指向需要插入小于x节点的位置
            pre, cur=res,res
    
            while cur.next:
                if cur.next.val<x:
                    temp_node=ListNode(cur.next.val)
                    cur.next=cur.next.next
                    temp=pre.next
                    pre.next=temp_node
                    temp_node.next=temp
                    if cur==pre:
                        cur=cur.next
                    pre=pre.next
                else:
                    cur=cur.next
                
            return res.next
    
                    
    

    【代码分析】

    1. 新建头节点,res指向head
    2. 创建两个指针,一个用于遍历节点(cur),一个用于记录小于x的节点的插入位置(pre)
    3. cur,pre先指向res,然后开始遍历
    4. 判断cur下一个节点是否小于x,如果小于就插入到pre的位置
    5. 注意:如果插入了新的节点,cur==pre,则需要跳转到下一个节点,否则不需要,比如:1-4-3-2      此时pre cur都在1这,2插入到1后面后,需要把cur指向2,即cur=cur.next,但是如果是 1-2-4-3-2-5,此时pre在2,cur在3的话,把后面的2插入到前面2的后面,1-2-2-4-3-5,此时cur在3,它的next已经变成了5,还需要继续判断,因此不需要cur=cur.next
    6. 如果cur下一个节点大于x,直接查看下一个节点
    7. 最终返回res.next
  • 相关阅读:
    CSS自动控制图片大小的代码
    JS 判断 Radio 单选按钮是否为选中状态 并弹出 值信息
    [转]eclipse github 提交代码
    WEB 开发工具分享
    javaShop的一些总结
    前端进阶试题(css部分)
    如何判断浏览器 然后针对不同的浏览器加入单独的样式
    jquery 提示信息显示后自动消失的具体实现
    html a标签 图片边框和点击后虚线框的有关问题
    html 包含一个公共文件
  • 原文地址:https://www.cnblogs.com/dreamyu/p/11867730.html
Copyright © 2020-2023  润新知