Remove Nth Node From End of List Solutions in C++
Number 19
Difficulty Medium
Acceptance 35.2%
Link LeetCode
Solutions
C++ solution by haoel/leetcode
// Source : https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/// Author : Hao Chen// Date : 2014-06-21/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/class Solution {public:ListNode *removeNthFromEnd(ListNode *head, int n) {if (head==NULL || n<=0){return NULL;}ListNode fakeHead(0);fakeHead.next=head;head=&fakeHead;ListNode *p1, *p2;p1=p2=head;for(int i=0; i<n; i++){if (p2==NULL) return NULL;p2=p2->next;}while (p2->next!=NULL){p2=p2->next;p1=p1->next;}p1->next = p1->next->next;return head->next;}};
C++ solution by pezy/LeetCode
#include <cstddef>struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};class Solution {public:ListNode *removeNthFromEnd(ListNode *head, int n) {ListNode **del = &head, *iter = head;for (int i=0; i<n; ++i, iter = iter->next) ;for (; iter != NULL; del = &((*del)->next), iter = iter->next ) ;*del = (*del)->next;return head;}};
C++ solution by liuyubobobo/Play-Leetcode
/// Source : https://leetcode.com/problems/remove-nth-node-from-end-of-list/description//// Author : liuyubobobo/// Time : 2017-11-15#include <iostream>#include <cassert>using namespace std;///Definition for singly-linked list.struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};/// LinkedList Test Helper FunctionsListNode* createLinkedList(int arr[], int n){if(n == 0)return NULL;ListNode* head = new ListNode(arr[0]);ListNode* curNode = head;for(int i = 1 ; i < n ; i ++){curNode->next = new ListNode(arr[i]);curNode = curNode->next;}return head;}void printLinkedList(ListNode* head){if(head == NULL){cout<<"NULL"<<endl;return;}ListNode* curNode = head;while(curNode != NULL){cout << curNode->val;if(curNode->next != NULL)cout << " -> ";curNode = curNode->next;}cout << endl;return;}void deleteLinkedList(ListNode* head){ListNode* curNode = head;while(curNode != NULL){ListNode* delNode = curNode;curNode = curNode->next;delete delNode;}return;}/// Get the total length and remove the nth node/// Two Pass Algorithm////// Time Complexity: O(n)/// Space Complexity: O(1)class Solution {public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;int length = 0;for(ListNode* cur = dummyHead->next ; cur != NULL ; cur = cur->next)length ++;int k = length - n;assert(k >= 0);ListNode* cur = dummyHead;for(int i = 0 ; i < k ; i ++)cur = cur->next;ListNode* delNode = cur->next;cur->next = delNode->next;delete delNode;ListNode* retNode = dummyHead->next;delete dummyHead;return retNode;}};int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr)/sizeof(int);ListNode* head = createLinkedList(arr, n);printLinkedList(head);head = Solution().removeNthFromEnd(head, 2);printLinkedList(head);deleteLinkedList(head);return 0;}
C++ solution by liuyubobobo/Play-Leetcode
/// Source : https://leetcode.com/problems/remove-nth-node-from-end-of-list/description//// Author : liuyubobobo/// Time : 2017-11-15#include <iostream>#include <cassert>using namespace std;///Definition for singly-linked list.struct ListNode {int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};/// LinkedList Test Helper FunctionsListNode* createLinkedList(int arr[], int n){if(n == 0)return NULL;ListNode* head = new ListNode(arr[0]);ListNode* curNode = head;for(int i = 1 ; i < n ; i ++){curNode->next = new ListNode(arr[i]);curNode = curNode->next;}return head;}void printLinkedList(ListNode* head){if( head == NULL ){cout << "NULL" << endl;return;}ListNode* curNode = head;while(curNode != NULL){cout << curNode->val;if( curNode->next != NULL )cout << " -> ";curNode = curNode->next;}cout << endl;return;}void deleteLinkedList(ListNode* head){ListNode* curNode = head;while(curNode != NULL){ListNode* delNode = curNode;curNode = curNode->next;delete delNode;}return;}/// Two Pointers - One Pass Algorithm/// Time Complexity: O(n)/// Space Complexity: O(1)class Solution {public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummyHead = new ListNode(0);dummyHead->next = head;ListNode* p = dummyHead;ListNode* q = dummyHead;for(int i = 0 ; i < n + 1 ; i ++){assert(q);q = q->next;}while(q){p = p->next;q = q->next;}ListNode* delNode = p->next;p->next = delNode->next;delete delNode;ListNode* retNode = dummyHead->next;delete dummyHead;return retNode;}};int main() {int arr[] = {1, 2, 3, 4, 5};int n = sizeof(arr)/sizeof(int);ListNode* head = createLinkedList(arr, n);printLinkedList(head);head = Solution().removeNthFromEnd(head, 2);printLinkedList(head);deleteLinkedList(head);return 0;}