//链表的插入insert()和删除delete_node()还有输出,翻转everse()
#include<iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int _data) {
data = _data;
next = NULL;
}
};
class LinkList {
private:
Node* head;
public:
LinkList() {
head = NULL;
}
void insert(Node* node,int index){
// 头指针为空,那么我们就让node成为头指针
if(head == NULL){
head = node;
return;
}
//第二种特殊情况,就是如果插入节点后的位置是链表首位,也就是index等于0的时候。
if(index == 0){
//如果节点插入后是链表首位,那么先让node的指针指向当前表头head,
//完成node的插入,然后让node成为头结点,完成表头的更新,
//然后用return语句结束函数
node->next = head;
head = node;
return;
}
//*写在类名旁边,还是变量名旁边意思是相同的
Node *current_node = head;
int count = 0;
while(current_node->next != NULL && count < index -1){
current_node = current_node->next;
count++;
}
if(count == index - 1){
node->next = current_node->next;
current_node->next = node;
}
}
void output(){
if(head == NULL){
return;
}
Node *current_node = head;
while(current_node != NULL){
//节点数据的表示方式->data
cout<<current_node->data<<" ";
current_node = current_node->next;
}
//输出回车
cout<<endl;
}
void delete_node(int index){
if(head == NULL){
return;
}
Node* current_node = head;
int count = 0;
if(index == 0){
head = head->next;
delete current_node;
return;
}
while(current_node->next != NULL && count < index-1){
current_node = current_node->next;
count = count + 1;
}
//找到指定的节点,还有检测是不是删除最后一个节点
if( count == index - 1 && current_node->next != NULL){
Node* delete_node = current_node->next;
current_node->next = delete_node->next;
delete delete_node;
}
}
void reverse(){
if(head == NULL){
return;
}
Node *next_node, *current_node;
current_node = head->next;
head->next = NULL;
while(current_node != NULL){
next_node = current_node->next;
current_node->next =head;
head = current_node;
current_node = next_node;
}
}
};
int main() {
LinkList linklist;
for(int i = 1 ; i <= 10 ; i++){
Node *node = new Node(i);
linklist.insert(node,i-1);
}
linklist.output();
linklist.delete_node(5);
linklist.output();
linklist.reverse();
linklist.output();
return 0;
}
计蒜客 数据结构 链表 C++
最新推荐文章于 2019-09-18 17:58:01 发布