문제 : 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;
}
}
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;
}
}