题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
本题可以考虑用栈来解决,将链表中,需要移除的结点和之前的结点移入栈,这时需要移除的结点位于我们的栈尾部,然后可以直接跳过我们移除的结点,即可实现要求。
- Stack.peek()
peek()函数返回栈顶的元素,但不弹出该栈顶元素。 - Stack.pop()
pop()函数返回栈顶的元素,并且将该栈顶元素出栈。
public class Removeformend {
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode ptr = new ListNode(0,head);
Deque<ListNode> stack = new LinkedList <ListNode>();
ListNode cur = ptr;
while (cur != null){
stack.push(cur);
cur = cur.next;
}
for (int i = 0; i< n; i++){
stack.pop();
}
ListNode pt = stack.peek();
pt.next = pt.next.next;
ListNode an = ptr.next;
return an;
}
}
}
}