当前位置:首页 » 《资源分享》 » 正文

【程序员面试宝典】链表分割_Layman光~的博客

2 人参与  2021年10月18日 07:24  分类 : 《资源分享》  评论

点击全文阅读


题目:

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
在这里插入图片描述

题目分析:

解决这个问题采用的方法是:
把比x小的值插入到一个链表,
把比x大的值插入到一个链表,
再把两个链表连接到一起。

代码实现:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:
    ListNode* partition(ListNode* pHead, int x) {
        // write code here
        struct ListNode* lessHead,*lessTail,*greaterHead,*greaterTail;
        lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));
        greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));
        struct ListNode* cur = pHead;
        while(cur)
        {
            if(cur->val<x)
            {
                lessTail->next = cur;
                lessTail = cur;
            }
            else
            {
                greaterTail->next = cur;
                greaterTail = cur;
            }
            cur = cur->next;
        }
        //切记把最后一个的next置成空。
        greaterTail->next = NULL;
        
        lessTail->next = greaterHead ->next;
        struct ListNode* head = lessHead->next;
        free(lessHead);
        free(greaterHead);
        return head;
    }
};

点击全文阅读


本文链接:http://zhangshiyu.com/post/29976.html

链表  结点  指针  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1