其实根本没有什么前插法,这是一个坑!!!
因为获取不到前一个结点的next指针,故,实现方法为:向当前结点后面插入一个新的结点,交换两个结点的值
c++代码实现如下:
#include <iostream>
#include <algorithm>
using namespace std;
template < typename T>
class Node{
public:
~Node();
Node<T>* next{nullptr};
T data;
};
template <typename T>
Node<T>::~Node()
{
next = nullptr;
}
template <typename T>
void insert(Node<T>* s, T data)
{
if(s == nullptr) return;
Node<T>* p = new Node<T>();
p->next = s->next;
s->next = p;
p->data = s->data;
s->data = data;
}
template <typename T>
void erase(Node<T>* s)
{
if(s == nullptr || s->next == nullptr) return;
Node<T>* p = s->next;
s->data = std::move(p->data);
s->next = p->next;
delete p;
p = nullptr;
}
int main()
{
auto head = new Node<int>();
head->data = -1;
auto t = new Node<int>();
head->next = t;
t->data = 4;
insert(t, 8);
insert(t, 9);
insert(t, 5);
insert(t, 1);
Node<int>* s = head;
while(s)
{
cout<< s <<":"<<s->data <<" ";
s = s->next;
}
cout << endl;
Node<int>* p = head->next;
erase(p);
Node<int>* x = head;
while(x)
{
cout<< x <<":"<<x->data <<" ";
x = x->next;
}
cout << endl;
return 0;
}
结果:
0xff4010:-1 0xff4030:1 0xff40b0:5 0xff4090:9 0xff4070:8 0xff4050:4
0xff4010:-1 0xff4030:5 0xff4090:9 0xff4070:8 0xff4050:4
附上一篇打脸文章
https://blog.youkuaiyun.com/helloworld_ptt/article/details/86522516