题目:Remove Nth Node From End of List 移除list中倒数第n个节点
难度:中等
Given a linked list, remove the n-th node from the end of list and return its head.
Example:
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
题意解析:
给你一个链表,移除倒数第n个节点然后返回移除后的链表。
阶梯思路一:
遍历整个链表获取它的长度n,然后再次遍历,并且设定一个计数器,当计数器i+n=len时,将该节点移除。移除节点时注意,在移除节点的前一个节点做判断,此时应将移除几点的下一个节点指向保存下来,然后让移除节点的前一个节点指向它。
比如移除的节点为current,它的上一个节点为pre,下一个为post;那么当遍历到pre节点时,即i+n ==len-1时,此时先将一个临时变量temp指向post,然后断开current的指向,将pre指向temp即可。
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode node = head;
ListNode root = head;
int len = 0;
while (head != null){
len ++;
head = head.next;
}
if (n > len){
return node;
}
if (n == len){
return node.next;
}
int i = 0;
while (node != null){
if (i == len - n - 1){
ListNode temp = node.next.next;
node.next.next = null;
node.next = temp;
}
node = node.next;
i++;
}
return root;
}
提交代码之后:
Runtime: 0 ms, faster than 100.00% of Java online submissions for Remove Nth Node From End of List.
Memory Usage: 36.9 MB, less than 92.46% of Java online submissions for Remove Nth Node From End of List.