Description
Code
package main
import "fmt"
type ListNode struct {
Val int
Next *ListNode
}
func main() {
// 1 -> 1 -> 2 -> 3 -> 3
origin := &ListNode{Val: 1, Next: &ListNode{Val: 1, Next: &ListNode{Val: 2, Next: &ListNode{Val: 3, Next: &ListNode{Val: 3, Next: nil}}}}}
deleteDuplicates(origin)
for origin != nil {
fmt.Println(origin.Val)
origin = origin.Next
}
// 1 -> 2 -> 3
}
func deleteDuplicates(head *ListNode) *ListNode {
if head == nil {
return head
}
current := head
for current.Next != nil {
if current.Val == current.Next.Val {
current.Next = current.Next.Next
} else {
current = current.Next
}
}
return head
}
먼저 입력된 리스트가 비어 있는 경우, 그대로 반환합니다. 리스트가 비어 있지 않으면 첫 번째 노드에서 시작하여 리스트를 순회합니다.
현재 노드(current)와 다음 노드(current.Next)의 값이 같으면, 현재 노드의 Next 포인터를 다음 노드의 다음 노드를 가리키도록 변경합니다.
이는 중복된 노드를 제거하는 과정입니다. 만약 값이 다르면, current를 다음 노드로 이동하여 계속 탐색합니다.
이 과정을 리스트의 끝까지 반복하며, 중복된 값이 모두 제거된 리스트를 반환합니다.
'leetcode , 백준' 카테고리의 다른 글
[Go] 10773 제로 (0) | 2025.01.03 |
---|---|
[Go] 9012 괄호 (0) | 2025.01.02 |
70. Climbing Stairs (0) | 2024.10.19 |
69. Sqrt(x) (0) | 2024.10.19 |
58. Length of Last Word (0) | 2024.08.14 |