码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode题解]86. 分隔链表 | 三指针 + 虚拟头节点

时间:2020-11-25 12:06:05      阅读:7      评论:0      收藏:0      [点我收藏+]

标签:har   csharp   math   空间   插入   while   turn   lan   ext   

解题思路

三指针,一个指向前半部分待插入位置,一个指向后半部分待插入位置,最后一个从前往后遍历

代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode Partition(ListNode head, int x) {
        // 三指针,一个指向前半部分待插入位置,一个指向后半部分待插入位置,最后一个从前往后遍历
        ListNode dummyP = new ListNode(0), dummyQ = new ListNode(0); 
        ListNode p = dummyP, q = dummyQ, cur = head;
        while(cur != null) {
            if(cur.val < x) {
                p.next = cur;
                p = p.next;
            } else {
                q.next = cur;
                q = q.next;
            }
            cur = cur.next;
        }

        p.next = dummyQ.next;   // 拼接两个链表
        q.next = null;  // 并把后半部分链表的尾部设置为 null

        return dummyP.next;
    }
}

复杂度分析

  • 时间复杂度:\(O(n)\),其中 \(n\) 是链表长度。
  • 空间复杂度:\(O(1)\)

[LeetCode题解]86. 分隔链表 | 三指针 + 虚拟头节点

标签:har   csharp   math   空间   插入   while   turn   lan   ext   

原文地址:https://www.cnblogs.com/liang24/p/14013454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!