leetcode.2487.从链表中移除节点

发布时间:2024年01月18日

题目描述:
给你一个链表的头节点 head 。
移除每个右侧有一个更大数值的节点。
返回修改后链表的头节点 head 。

示例 1:
输入:head = [5,2,13,3,8]
输出:[13,8]
解释:需要移除的节点是 5 ,2 和 3 。

  • 节点 13 在节点 5 右侧。
  • 节点 13 在节点 2 右侧。
  • 节点 8 在节点 3 右侧。
    示例 2:
    输入:head = [1,1,1,1]
    输出:[1,1,1,1]
    解释:每个节点的值都是 1 ,所以没有需要移除的节点。

提示:
给定列表中的节点数目在范围 [1, 105] 内
1 <= Node.val <= 105

代码实现:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

class Solution {
public:
    ListNode* removeNodes(ListNode* head) {
        stack<ListNode*> st;
        while (head) {
            st.push(head);
            head = head->next;
        }

        while (!st.empty()) {
            if (head == nullptr || st.top()->val >= head->val) {
                st.top()->next = head;
                head = st.top();
            }
            st.pop();
        }
        return head;
    }
};
文章来源:https://blog.csdn.net/m0_73865858/article/details/135677141
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。