亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++如何劃分鏈表

發布時間:2022-03-28 14:02:57 來源:億速云 閱讀:205 作者:iii 欄目:大數據

這篇文章主要介紹了C++如何劃分鏈表的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇C++如何劃分鏈表文章都會有所收獲,下面我們一起來看看吧。

劃分鏈表

For example,
Given 1->4->3->2->5->2 and x = 3,
return 1->2->2->4->3->5.

這道題要求我們劃分鏈表,把所有小于給定值的節點都移到前面,大于該值的節點順序不變,相當于一個局部排序的問題。那么可以想到的一種解法是首先找到第一個大于或等于給定值的節點,用題目中給的例子來說就是先找到4,然后再找小于3的值,每找到一個就將其取出置于4之前即可,代碼如下:

解法一

class Solution {
public:
    ListNode *partition(ListNode *head, int x) {
        ListNode *dummy = new ListNode(-1);
        dummy->next = head;
        ListNode *pre = dummy, *cur = head;;
        while (pre->next && pre->next->val < x) pre = pre->next;
        cur = pre;
        while (cur->next) {
            if (cur->next->val < x) {
                ListNode *tmp = cur->next;
                cur->next = tmp->next;
                tmp->next = pre->next;
                pre->next = tmp;
                pre = pre->next;
            } else {
                cur = cur->next;
            }
        }
        return dummy->next;
    }
};

這種解法的鏈表變化順序為:

1 -> 4 -> 3 -> 2 -> 5 -> 2 

1 -> 2 -> 4 -> 3 -> 5 -> 2 

1 -> 2 -> 2 -> 4 -> 3 -> 5

此題還有一種解法,就是將所有小于給定值的節點取出組成一個新的鏈表,此時原鏈表中剩余的節點的值都大于或等于給定值,只要將原鏈表直接接在新鏈表后即可,代碼如下:

解法二

class Solution {
public:
    ListNode *partition(ListNode *head, int x) {
        if (!head) return head;
        ListNode *dummy = new ListNode(-1);
        ListNode *newDummy = new ListNode(-1);
        dummy->next = head;
        ListNode *cur = dummy, *p = newDummy;
        while (cur->next) {
            if (cur->next->val < x) {
                p->next = cur->next;
                p = p->next;
                cur->next = cur->next->next;
                p->next = NULL;
            } else {
                cur = cur->next;
            }
        }
        p->next = dummy->next;
        return newDummy->next;
    }
};

此種解法鏈表變化順序為:

Original: 1 -> 4 -> 3 -> 2 -> 5 -> 2 

New:

Original: 4 -> 3 -> 2 -> 5 -> 2 

New:   1

Original: 4 -> 3 -> 5 -> 2 

New:   1 -> 2

Original: 4 -> 3 -> 5 

New:   1 -> 2 -> 2

Original: 

New:   1 -> 2 -> 2 -> 4 -> 3 -> 5 

關于“C++如何劃分鏈表”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“C++如何劃分鏈表”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

宜城市| 长寿区| 江达县| 五河县| 米林县| 寿宁县| 基隆市| 翁牛特旗| 锦屏县| 亳州市| 阜康市| 宁海县| 青海省| 安徽省| 奎屯市| 专栏| 时尚| 福清市| 白玉县| 临泽县| 靖州| 阿克苏市| 武邑县| 都安| 西宁市| 会理县| 遂川县| 安庆市| 和龙市| 忻州市| 尼勒克县| 城市| 上饶市| 历史| 长汀县| 通辽市| 广河县| 泉州市| 简阳市| 隆尧县| 阜南县|