문제 : Single liked list 구현

public class SingleLinkedList {
    private Node head;

    public void addToHead(int n) {
        Node newNode = new Node(n);
        newNode.next = head;
        head  = newNode;
    }

    public void removeFirst() {
        if(this.head == null){
            throw new RuntimeException("Nothing to remove");
        }
        this.head = head.next;
    }

    @Override
    public String toString() {
        String str = "[ ";
        for(Node n = head; n!=null; n=n.next) {
            str += n.data;
            str += " ";
        }
        str += "]";
        return str;
    }
}

문제 : Remove 구현

import java.util.HashSet;

public class MyList {
    private Node head;

    public void addToHead(int n) {
        Node newNode = new Node();
        newNode.data = n;
        newNode.next = head;
        head = newNode;
    }

    @Override
    public String toString() {
        String str = "[ ";
        for(Node n = head; n!=null; n=n.next) {
            str += n.data;
            str += " ";
        }
        str += "]";
        return str;
    }

    public void removeDuplicates() {
        HashSet<Integer> dupCheck = new HashSet<Integer>();
        Node prev= null
        Node n = this.head;
        while( n != null){
            if(!dupCheck.contains(n.data)){
                dupCheck.add(n.data);
                prev = n;
            }else{
                prev.next= n.next;
            }
            n = n.next;
        }
    }
}

문제 : Reverse구현

public class MyList {
    private Node head;

    public void reverse() {
        Node cur = head;
        Node prev = null;
        while(cur != null){
            Node temp = cur.next;
            cur.next= prev;
            prev = cur;
            cur = temp;
        }
        head = prev;
    }

    public void addToHead(int n) {
        Node newNode = new Node();
        newNode.data = n;
        newNode.next = head;
        head = newNode;
    }

    @Override
    public String toString() {
        String str = "[ ";
        for(Node n = head; n!=null; n=n.next) {
            str += n.data;
            str += " ";
        }
        str += "]";
        return str;
    }
}

문제 : 뒤에서 k번째 원소 구하기

public class MyList {
    private Node head;

    public void addToHead(int n) {
        Node newNode = new Node();
        newNode.data = n;
        newNode.next = head;
        head = newNode;
    }

    public Node kthToLast(int k) {
        Node target = head;
        while(target.next == null){
            target = head.next;
        }

        while( k>0){
            target = target.next;
            k--;
        }

        return target;
    }
}

/**
 * Runner 기법
 */
 public class MyList {
    private Node head;

    public void addToHead(int n) {
        Node newNode = new Node();
        newNode.data = n;
        newNode.next = head;
        head = newNode;
    }

    public Node kthToLast(int k) {
        if(k < 0){
            return null;
        }
        Node n1 = head;
        Node n2 = head;
        for(int i = 0; i< k ;i++){
            if(n2 == null){
                return null;
            }
            n2 = n2.next;
        }

        while(n2.next != null){
            n1 = n1.next;
            n2 = n2.next;
        }

        return n1;
    }
}

results matching ""

    No results matching ""