这个题目我自己开始就是用最传统的方法来做这个题,也就是和选择排序差不多的思路;只不过是不是交换而是删除;
也就是先记录下链表当中第一个数字;然后拿这个数字和剩余的数字进行比较,如果相同则把当前这个节点删除,也就是将前一个节点指向该节点的下一个节点(和动态链表中的删除操作一样),然后就把这个删除的节点存到一个容器当中(这里我用的queue),然后接着用链表中的第二个数字,和剩余的数字进行比较,重复上述操作;下面是我的代码(没有AC);顺便说一下这个代码的时间复杂度为(N^2)
#include <iostream>
using namespace std;
#include <algorithm>
#include <queue>
struct LinkNode{
int pre;
int ne;
int val;
}s[100000];
int main()
{
int head,n;
cin>>head>>n;
if(!n)return 0;
int p,v,ne;
for(int i= 0;i<n;i++)
{
cin >> p >> v >> ne;
s[p].val = v;
s[p].pre = p;
s[p].ne = ne;
}
/*for(int i = head;i!=-1;i=s[i].ne)
{
printf("%05d %d %05d\n",i,s[i].val,s[i].ne) ;
}*/
queue<Lin