https://leetcode.com/problems/remove-duplicates-from-sorted-list/
정렬된 연결 리스트의 head가 주어질 때 중복되는 값 제거 후 반환 (반환된 것 역시 정렬된 상태여야함)
값 두 개씩 체크하면서 다른 값 나오면 그때 ListNode에 추가하는 방식
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public ListNode DeleteDuplicates(ListNode head) {
if (head == null) return head;
ListNode currentNode = new ListNode(0);
ListNode answerNode = currentNode;
bool isSame = false;
int currentVal = 0;
while (head.next != null)
{
currentVal = head.val;
head = head.next;
if (currentVal != head.val)
{
currentNode.next = new ListNode(currentVal);
currentNode = currentNode.next;
isSame = false;
}
else
{
isSame = true;
}
}
currentNode.next = isSame ? new ListNode(currentVal) : new ListNode(head.val);
return answerNode.next;
}
}
새로 리스트 노드 따로 안 만들고 바로 넘기는 방식
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public ListNode DeleteDuplicates(ListNode head) {
ListNode currentNode = head;
while(currentNode?.next != null)
{
if(currentNode.val == currentNode.next.val)
{
currentNode.next = currentNode.next.next;
}
else
{
currentNode = currentNode.next;
}
}
return head;
}
}
(시간 의미 없음 -> 제일 좋은 풀이랑 같은 방식)