※ 引述《oinishere (是oin捏)》之铭言:
: 思路:
: 笑死
: 直接用阵列做monotonic stack
: 很白痴可是很简单
: 只要里面有一个以上的东西
: 就要改变他们的串接关系
: 然后传第一个就不用重新全串了
: class Solution {
: public:
: ListNode* removeNodes(ListNode* head)
: {
: ListNode* preh = new ListNode(0,head);
: vector<ListNode*> paper;
: ListNode* n = head;
: while(n)
: {
: while(!paper.empty() && paper[paper.size()-1]->val < n->val)
: {
: paper.pop_back();
: }
: paper.push_back(n);
: if(paper.size()>1)
: {
: paper[paper.size()-2]->next = paper[paper.size()-1];
: }
: n = n->next;
: }
: return paper[0];
: }
: };
想法:
一样,但没开array
C# code:
public class Solution
{
public ListNode RemoveNodes(ListNode head)
{
var stack = new Stack<ListNode>();
var current = head;
while (current != null)
{
while (stack.Count != 0 && stack.Peek().val < current.val)
{
stack.Pop();
}
if (stack.Count != 0)
{
stack.Peek().next = current;
}
else
{
head = current;
}
stack.Push(current);
current = current.next;
}
return head;
}
}