题解 | #牛牛的链表添加节点#
牛牛的链表添加节点
https://www.nowcoder.com/practice/e33b79c2e15a41f9b541e73cd256124a
#include <iomanip>
#include <iostream>
using namespace std;
class Node {//创建节点
public:
int data;
Node* next;//创建指向下一个节点的指针
Node(int val) {
data = val;
next = nullptr;//初始化指针为空
}
};
class Linkedlist {
public:
//创建头节点初始化为空
Node* head;
Linkedlist() {
head = nullptr;
}
//尾插法
void append(int val) {
Node* newnode = new Node(val);
//如果头节点为空,设置新节点为头节点
if (head == nullptr) {
head = newnode;
return;
}
Node* temp = head;//把头节点赋给temp
//遍历找到最后节点
while (temp->next != nullptr) {
//把后一个的指向赋给temp
temp = temp->next;
}
//把新节点链接到末尾
temp->next = newnode;
}
//打印链表
void printlist() {
Node* temp = head;
//遍历链表
while (temp != nullptr) {
cout << temp->data << " ";
//节点向后走
temp = temp->next;
}
}
//引用m作为插入的位置
void input(int &m){
int n;
cin>>n>>m;
int *a=new int[n];
for(int i=0;i<n;i++){
cin>>a[i];
//调用尾插函数
append(a[i]);
}
}
//定义函数插入节点
void charu(int &m){
//创建节点遍历链表
Node* temp=head;
int i=0;
//当temp落在插入节点前一个位置时停下
while(i<m-1&&temp!=nullptr){
temp=temp->next;
i++;
}
if(temp!=nullptr){
//创建新节点并将m的值赋给新节点
Node* newnode=new Node(m);
//把本来temp指向的下一个给新结点指向
newnode->next=temp->next;
//再把新节点被temp指向
temp->next=newnode;
}
}
};
int main() {
int m;
Linkedlist l1;
l1.input(m);
l1.charu(m);
l1.printlist();
}
