19. Remove Nth Node From End of List
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.
python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
if not head:
return None
v = []
while head:
v.append(head.val)
head = head.next
del v[-n]
if not v:
return None
res = ListNode(v[0])
node = res
for i in range(1, len(v)):
node.next = ListNode(v[i])
node = node.next
return res
java;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode p = head;
int d = 0;
while(d<n){
p = p.next;
d++;
}
ListNode q = head;
if(p==null){
return head.next;
}
while(p.next != null){
p = p.next;
q = q.next;
}
ListNode r = q.next;
q.next = r.next;
return head;
}
}
java相比python比较复杂 java还要考虑如果p已经到最后的结果
java是确定需要删除的节点到最后的距离,相对距离,用两个节点进行相对应的平移一边计算好距离,得到的q是在要删除节点的前一位。p和q之间的距离就是n