Algorithm/LeetCode

[LeetCode] - Delete Node in a Linked List

단일 연결 목록에서 노드를 삭제하는 함수를 작성하라.

list의 헤드에 대한 액세스 권한이 부여되지 않고 대신 직접 삭제 될 노드에 대한 액세스 권한이 부여됩니다.

삭제할 노드는 list의 tail 노드가 아니다.

 

 

Constraints:

  • The number of the nodes in the given list is in the range [2, 1000].
  • -1000 <= Node.val <= 1000
  • The value of each node in the list is unique.
  • The node to be deleted is in the list and is not a tail node

 

System.out.println으로 찍어보니 순회는 불필요해 보인다.

현재 노드를 없애려면

다음 노드를 현재노드로 다다음 노드를 다음 노드로 치환

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */

class Solution {
    public void deleteNode(ListNode node) {
        ListNode temp = null;
        temp = node.next.next;
        node.next = temp;
    }
}

Your input [4,5,1,9] 5
Your answer [4,5,9]
Expected answer [4,1,9]

4 -> 5 -> 9로 바뀌었다 그렇다면 val을 바꿔주면 어떨까

class Solution {
    public void deleteNode(ListNode node) {
        ListNode temp = null;
        node.val = node.next.val;
        temp = node.next.next;
        node.next = temp;
    }
}

Runtime: 0 ms
Memory Usage: 38.2 MB

temp 필요 없을거 같다

class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}