给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
O(n)时间复杂度
链表中的节点个数大于等于n
输入测试数据 (每行一个参数)
/** * Definition for ListNode * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { /** * @param head: The first node of linked list. * @param n: An integer * @return: The head of linked list. */ public ListNode removeNthFromEnd(ListNode head, int n) { // write your code here if(head==null || n<1) return head; ListNode curr=head; while(curr!=null) { curr=curr.next; n--; } if(n==0) { return head.next; } if(n<0) { curr=head; while(++n!=0) { curr=curr.next; } curr.next=curr.next.next; } return head; } } ###################################################### /** * Definition of singly-linked-list: * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public: /** * @param head: The first node of linked list. * @param n: An integer * @return: The head of linked list. */ ListNode * removeNthFromEnd(ListNode * head, int n) { // write your code here if(head==NULL || n<1) return head; ListNode* curr=head; while(curr!=NULL) { curr=curr->next; n--; } if(n==0) { return head->next; } if(n<0) { curr=head; while(++n!=0) { curr=curr->next; } curr->next=curr->next->next; } return head; } }; ############################################################## """ Definition of ListNode class ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next """ class Solution: """ @param head: The first node of linked list. @param n: An integer @return: The head of linked list. """ def removeNthFromEnd(self, head, n): # write your code here if head==None or n<1: return head curr=head res=ListNode(0) res.next=head tmp=res for i in range(0,n): curr=curr.next if curr==None: break while curr!=None: curr=curr.next tmp=tmp.next tmp.next=tmp.next.next return res.next
