Leetcode 203) Remove Linked List Elements
in Algorithms
내 답안
- 삭제하고 나서는 next하면 안되는데 계속 next해서 오답됐다.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
//아 !!! head, tail dummy 만들어주기로했지!!
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null){return null;}
ListNode h_dummy = new ListNode();
h_dummy.next=head;
ListNode dummy=h_dummy;
//맨 첫 원소가 val과 같을 때의 예외처리 코드
while(dummy.next!=null){
if(dummy.next.val==val){
dummy.next=dummy.next.next;
}else{
dummy= dummy.next;
}
//if문에서 dummy.next.next 할당해준 것, 이것을
}
//while문 나왔을 때, 마지막 dummy 이미 확인 된거구나
return h_dummy.next;
}
}
다른 답안
- 재귀로 간단하게 처리
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head == null){
return head;
}
ListNode temp = removeElements(head.next, val);
if(head.val == val){
return temp;
}
head.next = temp;
return head;
}
}
오답
- 주의, 삭제한 후에는 포인터 move하면 안된다.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
//아 !!! head, tail dummy 만들어주기로했지!!
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null){return null;}
ListNode h_dummy = new ListNode();
h_dummy.next=head;
ListNode dummy=h_dummy;
//맨 첫 원소가 val과 같을 때의 예외처리 코드
while(dummy.next!=null){
if(dummy.next.val==val){
dummy.next=dummy.next.next;
}
dummy= dummy.next;
//if문에서 dummy.next.next 할당해준 것, 이것을
}
//while문 나왔을 때, 마지막 dummy 이미 확인 된거구나
return h_dummy;
}
}