문제설명
단일 연결 리스트에서 노드를 삭제하는 함수를 작성하라.
리스트의 맨앞(head)에 대해 입력으로 받지 못한다. 대신, 삭제해야할 노드가 곧바로 함수 인자로 주어진다.
다만, 리스트에 가장 끝 노드(tail node)를 지우지는 않는 함수를 작성한다.
문제 풀이
이중 연결리스트가 아니므로 노드의 이전 포인터를 얻을 수 없다. 따라서, 이전 포인터와 다음 포인터를 연결하여 노드를 리스트에서 제거할 수 없다.
다음 노드의 값을 삭제할 노드에 복사하고 다음 노드의 다음 노드 값을 현재 노드의 다음 노드로 둔다.
다시 말해, 파라미터로 주어진 현재노드는 놔두고 다음 노드가 삭제되는 방식이다.
public class ListNode {
public var val: Int
public var next: ListNode?
public init(_ val: Int) {
self.val = val
self.next = nil
}
}
func deleteNode(_ node: ListNode?) {
if let n = node, let next = n.next {
n.val = next.val
n.next = next.next
}
}
var node1 = ListNode(1)
var node2 = ListNode(2)
var node3 = ListNode(3)
var node4 = ListNode(4)
node1.next = node2
node2.next = node3
node3.next = node4
deleteNode(node2)
print(node1.next?.val) // 3
print(node2.val) // 3
print(node3.val) // 3
print(node3.next?.val) // 4
'알고리즘풀이' 카테고리의 다른 글
Leetcode: Reverse Linked List, 연결 리스트 뒤집기 (0) | 2021.02.10 |
---|---|
Leetcode: Remove Nth Node From End of List, 연결 리스트의 끝부터 N번째 노드 삭제하기 (0) | 2021.02.07 |
Leetcode: Longest Common Prefix, 가장 긴 공통 접두사 (0) | 2021.02.05 |
Leetcode: strStr(), 건초더미에서 바늘찾기 (0) | 2021.02.03 |
Leetcode: Valid Palindrome, 회문 판별 (0) | 2021.01.31 |