Skip to content

Latest commit

 

History

History
84 lines (62 loc) · 2.15 KB

140、向链表的末尾添加一个元素?从链表尾部到头部打印结点信息?如何合并两个有序链表?.md

File metadata and controls

84 lines (62 loc) · 2.15 KB

140、向链表的末尾添加一个元素?从链表尾部到头部打印结点信息?如何合并两个有序链表?

向链表的末尾添加一个元素的步骤如下:

新建一个节点,为其赋值;

遍历链表,找到最后一个节点;

将最后一个节点的next指针指向新节点;

新节点的next指针赋值为NULL,表示链表的末尾。

从链表尾部到头部打印节点信息的步骤如下:

遍历链表,将每个节点的值存放在栈中;

遍历栈,将栈中的值弹出并输出,即为链表的逆序输出。

合并两个有序链表的步骤如下:

新建一个空链表,作为合并后的链表;

遍历两个有序链表,比较当前两个链表的节点值,将较小的节点插入到新链表中;

如果其中一个链表已经遍历完,将另一个链表剩余的节点插入到新链表的末尾;

返回新链表。

示例代码如下:

// 向链表的末尾添加一个元素`
`void addNode(Node* head, int val) {`
    `Node* newNode = new Node(val);`
    `Node* cur = head;`
    `while (cur->next != NULL) {`
        `cur = cur->next;`
    `}`
    `cur->next = newNode;`
`}`
`// 从链表尾部到头部打印节点信息`
`void printListReverse(Node* head) {`
    `stack<Node*> s;
    Node* cur = head;`
    `while (cur != NULL) {`
        `s.push(cur);`
        `cur = cur->next;`
    `}`
    `while (!s.empty()) {`
        `Node* node = s.top();`
        `s.pop();`
        `cout << node->val << " ";`
    `}`
`}`
`// 合并两个有序链表`
`Node* mergeList(Node* head1, Node* head2) {`
    `Node* dummy = new Node(-1);`
    `Node* cur = dummy;`
    `while (head1 != NULL && head2 != NULL) {`
        `if (head1->val < head2->val) {`
            `cur->next = head1;`
            `head1 = head1->next;`
        `} else {`
            `cur->next = head2;`
            `head2 = head2->next;`
        `}`
        `cur = cur->next;`
    `}`
    `if (head1 != NULL) {`
        `cur->next = head1;`
    `}`
    `if (head2 != NULL) {`
        `cur->next = head2;`
    `}`
    `return dummy->next;`
`}`