{"componentChunkName":"component---src-templates-blog-post-js","path":"/yagmyagm/linkedList/","result":{"data":{"site":{"siteMetadata":{"title":"Zayden","author":"[Your Name]","siteUrl":"https://gatsby-starter-bee.netlify.com","comment":{"disqusShortName":"","utterances":"JaeYeopHan/gatsby-starter-bee"},"sponsor":{"buyMeACoffeeId":"jbee"}}},"markdownRemark":{"id":"e0c3ca47-f7f3-52ef-b03b-799e4d03ca84","excerpt":"링크드 리스트는 데이터를 일직선으로 나영한 형태를 가지고 있습니다. 데이터 추가나 삭제는 쉽지만, 원하는 데이터에 접근하려면 시간이 많이 걸립니다. 배열 vs 링크드리스트 배열은 메모리 상에서 연속적인 공간을 할당받아 데이터를 저장한다. 배열에서는 데이터를 접근할때 인덱스(index…","html":"<p>링크드 리스트는 데이터를 일직선으로 나영한 형태를 가지고 있습니다. 데이터 추가나 삭제는 쉽지만, 원하는 데이터에 접근하려면 시간이 많이 걸립니다.</p>\n<h3 id=\"배열-vs-링크드리스트\" style=\"position:relative;\"><a href=\"#%EB%B0%B0%EC%97%B4-vs-%EB%A7%81%ED%81%AC%EB%93%9C%EB%A6%AC%EC%8A%A4%ED%8A%B8\" aria-label=\"배열 vs 링크드리스트 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>배열 vs 링크드리스트</h3>\n<p>배열은 메모리 상에서 연속적인 공간을 할당받아 데이터를 저장한다. 배열에서는 데이터를 접근할때 인덱스(index)라는 데이터의 주소를 가리키는 식별자를 통해 빠르게 특정 데이터에 접근할 수 있다. 하지만 이러한 특징으로 인해 중간에 데이터를 삽입 또는 삭제하는 과정이 느리다.</p>\n<p>반면에 링크드 리스트는 메모리 상에서 연속적인 공간에 데이터를 저장하지 않을 수 있다. 리스트의 각 데이터들은 다음 데이터에 위치를 알 수 있는 정보, 즉 포인터를 가지고 있다. 이러한 특징 때문에 배열과 다르게 데이터를 삽입 또는 삭제하는 과정이 빠르다. 하지만 특정 데이터에 접근을 할때 배열처럼 인덱스로 접근할 수 없기때문에 첫번째 데이터부터 선형 검색을 해야하기 때문에 배열보다 느리다.</p>\n<br />\n<h3 id=\"링크드-리스트-구현\" style=\"position:relative;\"><a href=\"#%EB%A7%81%ED%81%AC%EB%93%9C-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EA%B5%AC%ED%98%84\" aria-label=\"링크드 리스트 구현 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>링크드 리스트 구현</h3>\n<ol>\n<li>노드 생성</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Node</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>value <span class=\"token operator\">=</span> value<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>링크드 리스트에서 각 데이터에 정보(값, 다음 데이터 위치)를 가지고 있는 노드를 구현합니다.</p>\n<br />\n<ol start=\"2\">\n<li>링크드 리스트 생성자 함수</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">LinkedList</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>링크드 리스트를 생성하기 위해서 생성자 함수를 선언하고 그 함수 안에는 링크드 리스트에 첫번째 데이터를 담당하고 있는 “head” 프로퍼티를 선언합니다. 그리고 링크드 리스트에 노드의 갯수를 알기 위한 size 프로퍼티를 선언합니다.</p>\n<br />\n<p><em>이후 과정부터는 class 를 제외하고 해당 구현하고자 하는 메소드만 표현하겠습니다.</em></p>\n<br />\n<ol start=\"3\">\n<li>add - 리스트 끝에 노드를 추가</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 노드 생성</span>\n\t<span class=\"token keyword\">const</span> node <span class=\"token operator\">=</span> New <span class=\"token function\">Node</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">===</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 현재 head 가 비어있으면 head에 node를 할당한다.</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 현재 노드</span>\n  \t<span class=\"token keyword\">let</span> currentNode <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// 해당 노드의 다음 값이 없을때까지 리스트를 탐색한다.</span>\n    <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      currentNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">// 마지막 노드에 추가할 노드를 할당한다.</span>\n    currentNode<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token comment\">// 리스트의 크기를 증가한다.</span>\n  <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>목록 끝에 요소를 추가하는 경우 고려사항</p>\n<ul>\n<li>리스트가 비어 있으면 요소를 추가하면 헤드가 됩니다.</li>\n<li>리스트가 비어 있지 않으면 리스트 끝까지 반복하고 리스트 끝에 요소를 추가합니다.</li>\n</ul>\n<br />\n<ol start=\"4\">\n<li>insertAt(value, index) - 리스트에 지정된 index에 요소를 추가한다.</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token function\">insertAt</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value<span class=\"token punctuation\">,</span> index</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>index <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token operator\">||</span> index <span class=\"token operator\">></span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// index가 0보다 작거나 리스트 크기보다 클때</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"유효한 인덱스를 입력하세요.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> node <span class=\"token operator\">=</span> New <span class=\"token function\">Node</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">let</span> currentNode <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>index <span class=\"token operator\">===</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// 첫번째에 추가하기</span>\n      node<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> head<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">let</span> currentIndex <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">let</span> previousNode <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token comment\">// 리스트에서 삽입할 위치를 탐색</span>\n      <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>currentIndex <span class=\"token operator\">&lt;</span> index<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        currentIndex<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n        previousNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">;</span>\n        currentNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n\n      <span class=\"token comment\">// 노드 추가</span>\n      node<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 노드(추가할)에 다음 요소를 현재 노드로 설정</span>\n      previousNode<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 이전 노드에 다음 요소를 노드(추가할)로 설정</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>리스트의 지정된 인덱스에 요소를 추가하기 위해 다음과 같은 조건을 고려 해야합니다.</p>\n<ul>\n<li>인덱스가 0이면 리스트의 앞쪽에 요소를 추가하고 head로 만듭니다.</li>\n<li>인덱스가 목록의 마지막 위치인 경우 리스트 끝에 요소를 추가합니다.</li>\n<li>인덱스가 0 ~ this.size -1 사이인 경우 인덱스까지 반복하고 해당 인덱스에 요소를 추가합니다.</li>\n</ul>\n<br />\n<ol start=\"5\">\n<li>remove(value) - 목록에서 요소를 제거합니다. 제거된 요소를 반환하거나 요소를 찾을 수 없는 경우 -1을 반환합니다.</li>\n</ol>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token keyword\">let</span> currentNode <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">let</span> previousNode <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// 리스트 순회</span>\n  <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>currentNode <span class=\"token operator\">!==</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>currentNode<span class=\"token punctuation\">.</span>value <span class=\"token operator\">===</span> value<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>previousNode <span class=\"token operator\">===</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// 현재 노드가 head 일때</span>\n        <span class=\"token comment\">// head 에 head 다음 요소 할당(즉, head 제거)</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// 현재 노드가 head가 아닐때</span>\n        <span class=\"token comment\">// 이전 노드의 next 에 현재 노드의 next 할당(즉, 현재 노드 제거)</span>\n        previousNode<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token operator\">--</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">return</span> currentNode<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">// 리스트를 순회하면서 이전노드, 현재노드 계속 변경</span>\n    previousNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">;</span>\n    currentNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<br/>\n<h3 id=\"전체-코드\" style=\"position:relative;\"><a href=\"#%EC%A0%84%EC%B2%B4-%EC%BD%94%EB%93%9C\" aria-label=\"전체 코드 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>전체 코드</h3>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Node</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>value <span class=\"token operator\">=</span> value<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">LinkedList</span> <span class=\"token punctuation\">{</span>\n\t<span class=\"token function\">constructor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">add</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 노드 생성</span>\n    <span class=\"token keyword\">const</span> node <span class=\"token operator\">=</span> New <span class=\"token function\">Node</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">===</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// 현재 head 가 비어있으면 head에 node를 할당한다.</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// 현재 노드</span>\n      <span class=\"token keyword\">let</span> currentNode <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">;</span>\n\n      <span class=\"token comment\">// 해당 노드의 다음 값이 없을때까지 리스트를 탐색한다.</span>\n      <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        currentNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n\n      <span class=\"token comment\">// 마지막 노드에 추가할 노드를 할당한다.</span>\n      currentNode<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">// 리스트의 크기를 증가한다.</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">insertAt</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value<span class=\"token punctuation\">,</span> index</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>index <span class=\"token operator\">&lt;</span> <span class=\"token number\">0</span> <span class=\"token operator\">||</span> index <span class=\"token operator\">></span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token comment\">// index가 0보다 작거나 리스트 크기보다 클때</span>\n      console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"유효한 인덱스를 입력하세요.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">const</span> node <span class=\"token operator\">=</span> New <span class=\"token function\">Node</span><span class=\"token punctuation\">(</span>value<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">let</span> currentNode <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">;</span>\n\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>index <span class=\"token operator\">===</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// 첫번째에 추가하기</span>\n        node<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> head<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">let</span> currentIndex <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">let</span> previousNode <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token comment\">// 리스트에서 삽입할 위치를 탐색</span>\n        <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>currentIndex <span class=\"token operator\">&lt;</span> index<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          currentIndex<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n          previousNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">;</span>\n          currentNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token comment\">// 노드 추가</span>\n        node<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 노드(추가할)에 다음 요소를 현재 노드로 설정</span>\n        previousNode<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> node<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 이전 노드에 다음 요소를 노드(추가할)로 설정</span>\n      <span class=\"token punctuation\">}</span>\n\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">value</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">let</span> currentNode <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">let</span> previousNode <span class=\"token operator\">=</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// 리스트 순회</span>\n    <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>currentNode <span class=\"token operator\">!==</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>currentNode<span class=\"token punctuation\">.</span>value <span class=\"token operator\">===</span> value<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>previousNode <span class=\"token operator\">===</span> <span class=\"token keyword\">null</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token comment\">// 현재 노드가 head 일때</span>\n          <span class=\"token comment\">// head 에 head 다음 요소 할당(즉, head 제거)</span>\n          <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>head <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span> <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token comment\">// 현재 노드가 head가 아닐때</span>\n          <span class=\"token comment\">// 이전 노드의 next 에 현재 노드의 next 할당(즉, 현재 노드 제거)</span>\n          previousNode<span class=\"token punctuation\">.</span>next <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>size<span class=\"token operator\">--</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> currentNode<span class=\"token punctuation\">.</span>value<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n\n      <span class=\"token comment\">// 리스트를 순회하면서 이전노드, 현재노드 계속 변경</span>\n      previousNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">;</span>\n      currentNode <span class=\"token operator\">=</span> currentNode<span class=\"token punctuation\">.</span>next<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","frontmatter":{"title":"연결 리스트","date":"July 21, 2023"}}},"pageContext":{"slug":"/yagmyagm/linkedList/","previous":{"fields":{"slug":"/algorithm/programmers/02/"},"frontmatter":{"title":"Programmers - 요격 시스템"}},"next":{"fields":{"slug":"/yagmyagm/script/"},"frontmatter":{"title":"async vs defer (script)"}}}}}