哪个网站做浏览器主页,在线空间设计,梵克雅宝手链,wordpress标签球形86. 分隔链表
题目描述
给你一个链表的头节点 head 和一个特定值 x #xff0c;请你对链表进行分隔#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1#xff1a;
输入#xff1a;head […86. 分隔链表
题目描述
给你一个链表的头节点 head 和一个特定值 x 请你对链表进行分隔使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1
输入head [1,4,3,2,5,2], x 3输出[1,2,2,4,3,5]
示例 2
输入head [2,1], x 2输出[1,2]
提示
链表中节点的数目在范围 [0, 200] 内-100 Node.val 100-200 x 200
解题方法
直接法
遍历原始链表并维护两个链表分别保存比 x 大和比 x 小的节点
C 语言
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* str1 malloc(sizeof(struct ListNode));struct ListNode* str2 malloc(sizeof(struct ListNode));struct ListNode* str1_h str1;struct ListNode* str2_h str2;while (NULL ! head) {if (head-val x) {str1-next head;str1 str1-next;} else {str2-next head;str2 str2-next;}head head-next;}str2-next NULL;str1-next str2_h-next;return str1_h-next;
}复杂度分析
时间复杂度为 O(n)其中 n 是原链表的长度。
空间复杂度为 O(1)。