1. 程式人生 > >資料結構: 單鏈表

資料結構: 單鏈表

複習一下單鏈表的建立
分別實現了 帶頭結點和不帶頭結點的尾插法

#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;
}

參考文獻

單鏈表的建立演算法