链表划分

来源:互联网 发布:java手游飞机 编辑:程序博客网 时间:2024/06/06 07:38

链表划分

问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。  你应该保留两部分内链表节点原有的相对顺序。   如给定链表 1->4->3->2->5->2->NULL,并且 x=3  返回 1->2->2->4->3->5->NULL。

解题思路:创建两个新链表,分别设为1,2;遍历给定链表,比较每个结点与给定值X值的大小,若比X小,则放入新链表1中,否则放入新链表2中。遍历完毕后,将新链表1 的最后一个结点指向新链表2的第一个结点,来达到将两个链表串起来从来实现划分链表的目的。

实现代码:

class Solution {
public:
    /**
     * @param head: The first node of linked list.
     * @param x: an integer
     * @return: a ListNode 
     */
    ListNode *partition(ListNode *head, int x) {
        // write your code here
        if(head==NULL) return NULL;
        ListNode *leftdummy=new ListNode(0);
        ListNode *rightdummy=new ListNode(0);
        ListNode *left=leftdummy;
        ListNode *right=rightdummy;
        while(head!=NULL){
            if(head->val<x){
                left->next=head;
                left=head;
            }
            else {
                right->next=head;
                right=head;
            }
            head=head->next;
            }
            right->next=NULL;
            left->next=rightdummy->next;
            return leftdummy->next;
        
    }
};

A题感悟:这道题是老师上课时讲过的一道题,当时看到这道题时,我觉得这道题在一个链表中不好操作,但是也没有想到要用两个链表。老师讲思路的时候,才知道原来链表还可以这样进行链接,感觉自己对链表有了新的认识和理解。真正在敲这个代码的时候,再次理解了老师那句“要脑洞大开”的话。

0 0
原创粉丝点击