复习一下单链表的创建
分别实现了 带头结点和不带头结点的尾插法
#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;
}