向链表的末尾添加一个元素的步骤如下:
新建一个节点,为其赋值;
遍历链表,找到最后一个节点;
将最后一个节点的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;`
`}`