91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

c語言合并兩個有序鏈表的方法是什么

小億
99
2023-12-01 22:24:42
欄目: 編程語言

合并兩個有序鏈表的方法是使用雙指針來比較兩個鏈表的節點值,然后按照順序將節點連接起來。

具體步驟如下:

  1. 定義一個新的鏈表頭節點指針newHead,并且定義一個指針指向它,用于后續的節點的連接。
  2. 定義兩個指針指向兩個有序鏈表的頭節點,分別命名為p1和p2,初始化為鏈表1和鏈表2的頭節點。
  3. 遍歷鏈表1和鏈表2,比較p1和p2指向節點的值: a. 若p1的值小于等于p2的值,則將p1指向的節點連接到newHead后面,并且將p1指針后移一位。 b. 若p1的值大于p2的值,則將p2指向的節點連接到newHead后面,并且將p2指針后移一位。
  4. 當其中一個鏈表遍歷完畢后,將另一個鏈表剩余部分直接連接到newHead后面。
  5. 返回newHead的下一個節點,即為合并后的有序鏈表的頭節點。

代碼示例:

#include <stdio.h>
#include <stdlib.h>

struct ListNode {
    int val;
    struct ListNode *next;
};

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    struct ListNode* newHead = (struct ListNode*)malloc(sizeof(struct ListNode));
    struct ListNode* p = newHead;

    struct ListNode* p1 = l1;
    struct ListNode* p2 = l2;

    while (p1 && p2) {
        if (p1->val <= p2->val) {
            p->next = p1;
            p1 = p1->next;
        } else {
            p->next = p2;
            p2 = p2->next;
        }
        p = p->next;
    }

    if (p1) {
        p->next = p1;
    }

    if (p2) {
        p->next = p2;
    }

    return newHead->next;
}

int main() {
    // 創建鏈表1: 1 -> 2 -> 4
    struct ListNode* l1 = (struct ListNode*)malloc(sizeof(struct ListNode));
    l1->val = 1;
    l1->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    l1->next->val = 2;
    l1->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    l1->next->next->val = 4;
    l1->next->next->next = NULL;

    // 創建鏈表2: 1 -> 3 -> 4
    struct ListNode* l2 = (struct ListNode*)malloc(sizeof(struct ListNode));
    l2->val = 1;
    l2->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    l2->next->val = 3;
    l2->next->next = (struct ListNode*)malloc(sizeof(struct ListNode));
    l2->next->next->val = 4;
    l2->next->next->next = NULL;

    // 合并兩個有序鏈表
    struct ListNode* mergedList = mergeTwoLists(l1, l2);

    // 輸出合并后的鏈表:1 -> 1 -> 2 -> 3 -> 4 -> 4
    while (mergedList) {
        printf("%d ", mergedList->val);
        mergedList = mergedList->next;
    }

    return 0;
}

輸出結果: 1 1 2 3 4 4

0
丰县| 临漳县| 揭东县| 张北县| 黑山县| 汶上县| 黑龙江省| 博爱县| 晋中市| 丰台区| 米林县| 西宁市| 淮安市| 昭苏县| 奉节县| 敖汉旗| 竹溪县| 河北区| 浦县| 塔城市| 新源县| 开鲁县| 民权县| 达州市| 蓝田县| 互助| 阳东县| 秦皇岛市| 依安县| 富裕县| 枣强县| 隆化县| 大城县| 合水县| 新田县| 长白| 宜丰县| 辽宁省| 华蓥市| 朝阳市| 南溪县|