数据结构: 单链表

复习一下单链表的创建
分别实现了 带头结点和不带头结点的尾插法

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

参考文献

单链表的创建算法

猜你喜欢

转载自blog.csdn.net/qjh5606/article/details/85016866