본문 바로가기
알고리즘 문제풀이/leetcode

[leetcode 19] Remove Nth Node From End of List

by m2162003 2020. 10. 15.

Given the head of a linked list, remove the nth node from the end of the list and return its head.

Follow up: Could you do this in one pass?

 

끝에서 n번째 노드를 제거하는 문제

 

Example 1:

Input: head = [1,2,3,4,5], n = 2 Output: [1,2,3,5]

Example 2:

Input: head = [1], n = 1 Output: []

Example 3:

Input: head = [1,2], n = 1 Output: [1]

 

풀이:

- 투포인터를 사용하면 한 번에 가능하다는데 귀찮아서 안해봤다. 나중에 해봐야지

- linked list를 이용한 더미 포인터를 만들어서 return

- 포인터 공부 열심히 하기

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
   
    ListNode* removeNthFromEnd(ListNode* head, int n) {
       
        ListNode *result = new ListNode(0);
        result -> next = head;
       
        int len = 0;
        ListNode* tmp = head;
        while(tmp != nullptr){
            tmp = tmp->next;
            len++;
        }
        len -= n;
        ListNode* cur = result;
        while(len >0){
            len--;
            cur = cur->next;
        }
        cur->next = cur->next->next;
        return result->next;
    }
};

댓글