C++构建链表
代码
头文件
LinkList.h
#ifndef LINKLIST_H
#define LINKLIST_H
#include <iostream>
#include <vector>
class LinkList {
friend std::ostream &operator<<(std::ostream &out, const LinkList &L);
friend LinkList* link2node2link(LinkList *obj);
public:
struct ListNode {
int val;
ListNode *next;
ListNode() : val(0), next(nullptr) {
}
ListNode(int x) : val(x), next(nullptr) {
}
ListNode(int x, ListNode* next) : val(x), next(next) {
}
};
LinkList() {
_dummyHead = new ListNode(0);
_len = 0;
}
int get(int index) const; // 取得链表第index个数的值
void addAtHead(int val); // 头插法
void addAtTail(int val); // 尾插法
void addAtIndex(int index, int val); // 在第index个数之后插入
void deleteAtIndex(int index); // 删除第index个数
void reverseList(); // 反转链表
private:
ListNode *_dummyHead;
unsigned _len = 0;
};
int LinkList::get(int index) const {
if (index < 0 || index > (_len - 1)) return -1;
ListNode *cur = _dummyHead->next;
while (index--) {
cur = cur->next;
}
return cur->val;
}
void LinkList::addAtHead(int val) {
ListNode *newNode = new ListNode(val); // 用val创建新节点
newNode->next = _dummyHead->next;
_dummyHead->next = newNode;
++_len