資料結構: 單鏈表
阿新 • • 發佈:2018-12-25
複習一下單鏈表的建立
分別實現了 帶頭結點和不帶頭結點的尾插法
#include "LinkList.h" // 建立一個空連結串列,不帶頭結點 void CreateLinkList1(ListNode *L) { return ; } // 建立一個空連結串列,帶頭結點 void CreateListList2(ListNode*& L){ L = new ListNode(-1); } // 用一個vector<int> 初始化連結串列(不帶頭結點) // 尾差法 void InitListList1(ListNode* &L,vector<int> v) { ListNode *pCur=NULL; for (int i = 0; i < v.size(); i++) { if (L == NULL) { // 頭結點特殊處理 pCur = new ListNode(v[i]); L = pCur; } else { pCur->next = new ListNode(v[i]); pCur = pCur->next; } } } // 用一個vector<int> 初始化連結串列(帶頭結點) void InitListList2(ListNode*& L, vector<int> v) { ListNode *pCur = L; // L是頭節點! for (int i = 0; i < v.size(); i++) { ListNode *pNode = new ListNode(v[i]); pCur->next = pNode; pCur = pNode; } } // 追加一個節點到末尾,不帶頭結點 ListNode* insertLast1(ListNode* &L, ListNode* node) { if (L == NULL||node==NULL) return NULL; ListNode* pCur = L; while (pCur->next != NULL) { pCur = pCur->next; } pCur->next = node; pCur->next->next = NULL; } // 追加一個節點到末尾,帶頭結點 ListNode* insertLast2(ListNode* &L, ListNode* node) { if (L == NULL || node == NULL) return NULL; ListNode* pCur = L->next; while (pCur->next != NULL) { pCur = pCur->next; } pCur->next = node; pCur->next->next = NULL; } // 追加一個節點到末尾,不帶頭結點 ListNode* insertLast1(ListNode* &L, int val) { if (L == NULL) return NULL; ListNode* pCur = L; while (pCur->next != NULL) { pCur = pCur->next; } pCur->next = new ListNode(val); } ListNode* insertLast2(ListNode* &L, int val) { if (L == NULL) return NULL; ListNode* pCur = L->next; while (pCur->next != NULL) { pCur = pCur->next; } pCur->next = new ListNode(val); } // 列印連結串列,不帶頭結點的 void PrintLinkList1(ListNode* pHead) { if (pHead == NULL) return; ListNode* pCur = pHead; while (pCur) { std::cout << pCur->val << std::ends; pCur = pCur->next; } std::cout << std::endl; } // 列印連結串列,帶頭結點的 void PrintLinkList2(ListNode* pHead) { if (pHead == NULL) return; ListNode* pCur = pHead->next; while (pCur) { std::cout << pCur->val << std::ends; pCur = pCur->next; } std::cout << std::endl; }