自学内容网 自学内容网

面试金典题2.4

给你一个链表的头节点 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

其实这道题我一开始还没理解到意思,我以为是要将整个链表的数字进行排序,后面发现其实没那么麻烦,它只需要跟给定的目标值进行比较就好了,比如给定目标值是5,那么只需要一个一个去跟5比较,比5小的放前面,比5大或相等的放后面。说到这里,其实这道题的思路已经出来了,就是去遍历整个链表,然后跟目标值进行比较,比目标值小的放在一个链表里面,比它大的放在另一个链表里面,然后把两个链表连接起来就是最后的结果。

leetcode代码如下

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* partition(ListNode* head, int x) {
        ListNode* s=new ListNode(0);
        ListNode* l=new ListNode(0);
        ListNode* sh=s;
        ListNode* lh=l;
        while(head!=nullptr){
            if(head->val<x){
                s->next=head;
                s=s->next;
            }else{
                l->next=head;
                l=l->next;
            }
            head=head->next;
        }
        l->next=nullptr;
        s->next=lh->next;
        return sh->next;
    }
};


原文地址:https://blog.csdn.net/m0_73096516/article/details/142417073

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!