p101 移除单链表倒数第 n 个节点(leetcode 19)
一:解题思路
注意如果n大于链表长度,说明要删除的节点不在链表中,直接返回原始链表就行。Time:O(k),Space:O(1),k为链表长度
二:完整代码示例 (C++版和Java版)
C++:
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* dummy = new ListNode(0); dummy->next = head; ListNode* p = dummy; ListNode* q = dummy; for (; n > 0 && q->next != NULL; n--) q = q->next; if (n != 0) return dummy->next; while (q->next != NULL) { p = p->next; q = q->next; } p->next = p->next->next; return dummy->next; } };
Java:
class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy=new ListNode(0); dummy.next=head; ListNode p=dummy,q=dummy; for(;n>0 && q.next!=null;n--) q=q.next; if(n!=0) return dummy.next; while(q.next!=null) { p=p.next; q=q.next; } p.next=p.next.next; return dummy.next; } }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号