언어/JAVA

링크드 리스트 구현

김어찐 2021. 8. 9. 15:37
728x90
public class SingleLinkedList {
	private Node head;
	
	public void addFirstNode(String data)
	{
		Node newNode = new Node(data,head);
		head = newNode;
		
	}
	
	public Node getLastNode()
	{
		for(Node currNode=head;currNode!=null;currNode=currNode.link)
		{
			if(currNode.link==null)
			{
				return currNode;
			}
		}
		return null;
			
	}
	
	public void addLastNode(String data)
	{
		if(head==null)
		{
			addFirstNode(data);
			return;
			
		}
		Node lastNode=getLastNode();
		Node newNode = new Node(data);
		
		lastNode.link = newNode;
	}
	
	public void insertAfterNode(Node preNode, String data)
	{
		if(preNode==null)
		{
			System.out.println("선행노드가 없어 삽입이 불가능합니다");
			return;
		}
		Node newNode = new Node(data,preNode.link);
		preNode.link = newNode;
		
	}
	
	public Node getNode(String data)
	{
		for(Node currNode=head;currNode!=null;currNode=currNode.link)
		{
			if(currNode.data.equals(data))
			{
				return currNode;
			}
		}
		return null;
	}
	
	public Node getPreviousNode(Node target)
	{
		
		for(Node currNode=head;currNode!=null;currNode=currNode.link)
		{
			if(currNode.link==target)
			{
				return currNode;
			}
		}
		return null;
	}
	
	public void deleteNode(String data)
	{
		Node targetNode = getNode(data);
		if(targetNode==null)
		{
			System.out.println("삭제할 노드가 없어서 삭제가 불가능합니다.");
		}
		
		Node preNode = getPreviousNode(targetNode);
		
		if(preNode == null)
		{
			head = targetNode.link;
		}
		else
		{
			preNode.link = targetNode.link;
		}
		targetNode.link=null;
	}
	
	public void printList()
	{
		System.out.print("L = ( ");
		for(Node currNode=head;currNode!=null;currNode=currNode.link)
		{
			System.out.print(currNode.data+" ");
		}
		System.out.println(" ) ");
	}
}
728x90