{"id":457,"date":"2013-05-14T14:11:56","date_gmt":"2013-05-14T21:11:56","guid":{"rendered":"http:\/\/192.168.1.2\/wordpress\/?p=457"},"modified":"2013-05-14T16:59:10","modified_gmt":"2013-05-14T23:59:10","slug":"linked-list","status":"publish","type":"post","link":"http:\/\/cywang.no-ip.org\/wordpress\/?p=457","title":{"rendered":"Linked List"},"content":{"rendered":"<p>\n\t&nbsp;\n<\/p>\n<p>\n\t<!--more-->\n<\/p>\n<table align=\"center\" border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width: 800px;\">\n<tbody>\n<tr>\n<td>\n\t\t\t\t&nbsp;\n\t\t\t<\/td>\n<td>\n\t\t\t\tLinked list\n\t\t\t<\/td>\n<td>\n\t\t\t\tArray\n\t\t\t<\/td>\n<td>\n\t\t\t\tDynamic array\n\t\t\t<\/td>\n<td>\n\t\t\t\tBalanced tree\n\t\t\t<\/td>\n<td>\n\t\t\t\tRandom access list\n\t\t\t<\/td>\n<\/tr>\n<tr>\n<td>\n\t\t\t\tIndexing\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (n)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (1)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (1)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (\\log{n})$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (\\log{n})$$\n\t\t\t<\/td>\n<\/tr>\n<tr>\n<td>\n\t\t\t\tInsert\/delete at beginning\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (1)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\tN\/A\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (n)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (\\log{n})$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (1)$$\n\t\t\t<\/td>\n<\/tr>\n<tr>\n<td>\n\t\t\t\tInsert\/delete at end\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (1)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\tN\/A\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (1)$$ amortized\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (\\log{n})$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (\\log{n})$$\n\t\t\t<\/td>\n<\/tr>\n<tr>\n<td>\n\t\t\t\tInsert\/delete at middle\n\t\t\t<\/td>\n<td>\n\t\t\t\tsearch time + $$\\theta (1)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\tN\/A\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (n)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (\\log{n})$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (\\log{n})$$\n\t\t\t<\/td>\n<\/tr>\n<tr>\n<td>\n\t\t\t\tWasted space (average)\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (n)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t0\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (n)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (n)$$\n\t\t\t<\/td>\n<td>\n\t\t\t\t$$\\theta (n)$$\n\t\t\t<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\n\tReference: <a href=\"http:\/\/en.wikipedia.org\/wiki\/Linked_list\" target=\"_blank\">Wikipedia Linked List<\/a>\n<\/p>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\t&nbsp;\n<\/p>\n<pre class=\"brush:cpp;\">\r\n#include &lt;iostream&gt;\r\nusing namespace std;\r\n\r\nclass Node\r\n{\r\nprivate:\r\n    Node *next;\r\n    int data;\r\npublic:\r\n    Node(){};\r\n    void setData(int nData)\r\n    {\r\n        data = nData;\r\n    };\r\n    void setNext(Node *nNext)\r\n    {\r\n        next = nNext;\r\n    };\r\n    int getData()\r\n    {\r\n        return data;\r\n    };\r\n    Node *Next()\r\n    {\r\n        return next;\r\n    };\r\n};\r\n\r\nclass List\r\n{\r\nprivate:\r\n    Node *head;\r\npublic:\r\n    List()\r\n    {\r\n        head = NULL;\r\n    };\r\n    void printList();\r\n    void deleteNode(int data);\r\n    void appendNode(int data);\r\n    void insertNode(int data, int pos);\r\n    void appendList(List secondList);\r\n    void inverseList();\r\n};\r\n\r\nvoid List::printList()\r\n{\r\n    Node *tmp = head;\r\n    if(tmp == NULL)\r\n    {\r\n        cout&lt;&lt;&quot;Empty List&quot;&lt;&lt;endl;\r\n        return;\r\n    }\r\n    while(tmp != NULL)\r\n    {\r\n        cout&lt;&lt;tmp-&gt;getData()&lt;&lt;&quot;-&gt;&quot;;\r\n        tmp = tmp-&gt;Next();\r\n    }\r\n    cout&lt;&lt;&quot;NULL&quot;&lt;&lt;endl;\r\n}\r\nvoid List::appendNode(int data)\r\n{\r\n    Node *newNode = new Node();\r\n    newNode-&gt;setData(data);\r\n    newNode-&gt;setNext(NULL);\r\n    \r\n    Node *tmp = head;\r\n    if(tmp != NULL)\r\n    {\r\n        while(tmp-&gt;Next() != NULL)\r\n            tmp = tmp-&gt;Next();\r\n        \r\n        tmp-&gt;setNext(newNode);\r\n    }\r\n    else\r\n        head = newNode;\r\n    \r\n}\r\nvoid List::insertNode(int data, int pos)\r\n{\r\n    Node *tmp = head;\r\n    if(tmp == NULL)\r\n        return;\r\n    \r\n    int currentPos = 0;\r\n    \r\n    while(currentPos != pos-1 &amp;&amp; pos &gt; 0 &amp;&amp; tmp-&gt;Next()!=NULL)\r\n    {\r\n        \r\n        tmp = tmp-&gt;Next();\r\n        currentPos++;\r\n    }\r\n    if(pos &gt; currentPos+1)\r\n    {\r\n        cout&lt;&lt;&quot;Insert fails.&quot;&lt;&lt;endl;\r\n        return;\r\n    }\r\n    if(pos == 0) \/\/ Insert a node to the head\r\n    {\r\n        Node *newNode = new Node();\r\n        newNode-&gt;setData(data);\r\n        newNode-&gt;setNext(tmp);\r\n        head = newNode;\r\n    }\r\n    else\r\n    {\r\n        Node *newNode = new Node();\r\n        newNode-&gt;setData(data);\r\n        newNode-&gt;setNext(tmp-&gt;Next());\r\n        tmp-&gt;setNext(newNode);\r\n    }\r\n}\r\nvoid List::deleteNode(int data)\r\n{\r\n    Node *tmp = head;\r\n    if(tmp == NULL)\r\n        return;\r\n    \r\n    if(tmp-&gt;Next() == NULL)\r\n    {\r\n        delete tmp;\r\n        head = NULL;\r\n    }\r\n    else\r\n    {\r\n        if(head-&gt;getData() == data)\r\n        {\r\n            Node *ptr = head;\r\n            head = ptr-&gt;Next();\r\n            delete ptr;\r\n        }\r\n        else\r\n        {\r\n            Node *prev;\r\n            Node *current = head;\r\n            if(current-&gt;Next() == NULL)\r\n                current = NULL;\r\n            while(current != NULL)\r\n            {\r\n                if(current-&gt;getData() == data)\r\n                {\r\n                    prev-&gt;setNext(current-&gt;Next());\r\n                    break;\r\n                }\r\n                else\r\n                {\r\n                    prev = current;\r\n                    current = current-&gt;Next();\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\nvoid List::appendList(List secondList)\r\n{\r\n    if(secondList.head == NULL)\r\n        return;\r\n    \r\n    Node *tmp = head;\r\n    if(tmp == NULL) \/\/first list is empty\r\n    {\r\n        head = secondList.head;\r\n        return;\r\n    }\r\n    while(tmp-&gt;Next() != NULL)\r\n    {\r\n        tmp = tmp-&gt;Next();\r\n    }\r\n    tmp-&gt;setNext(secondList.head);\r\n        \r\n        \r\n}\r\n\r\nvoid List::inverseList()\r\n{\r\n    Node* newHead = NULL;\r\n    while (head != NULL)\r\n    {\r\n        Node* next = head-&gt;Next();\r\n        head-&gt;setNext(newHead) ;\r\n        newHead = head;\r\n        head = next;\r\n    }\r\n    head = newHead;\r\n}\r\n\r\n\r\nint main(int argc, const char * argv[])\r\n{\r\n    List list;   \r\n    list.appendNode(10);\r\n    list.appendNode(20);\r\n    list.appendNode(30);\r\n    list.appendNode(40);\r\n    cout&lt;&lt;&quot;List: &quot;&lt;&lt;endl;\r\n    list.printList();\r\n    cout&lt;&lt;&quot;Inversed List:&quot;&lt;&lt;endl;\r\n    list.inverseList();\r\n    list.printList();\r\n  \r\n    return 0;\r\n}<\/pre>\n<p>\n\t&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[20,21],"tags":[],"class_list":["post-457","post","type-post","status-publish","format-standard","hentry","category-chapter-2-linked-lists","category-data-structures-and-algorithms"],"_links":{"self":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=457"}],"version-history":[{"count":9,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/457\/revisions"}],"predecessor-version":[{"id":470,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/457\/revisions\/470"}],"wp:attachment":[{"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=457"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/cywang.no-ip.org\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}