题解 | #牛牛的链表删除#
牛牛的链表删除
https://www.nowcoder.com/practice/d3df844baa8a4c139e103ca1b1faae0f
#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; } } //input函数中使用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 Delete(int m){ //创建两个节点一个在前一个在后 Node*temp=head; Node*pail=temp->next; //当后一个节点不为空时 while(pail!=nullptr){ //当后一个节点数据为要删除的数时 if(pail->data==m){ //把后一个的下一个赋给前一个的下一个 temp->next=pail->next; //删除后节点 delete pail; return; } //两个节点同时向后走 temp=pail; pail=pail->next; } } }; int main() { int m; Linkedlist l1; l1.input(m); l1.Delete(m); l1.printlist(); } // 64 位输出请用 printf("%lld")