给定一个链表,你需要删除那些绝对值相同的节点,对于每个绝对值K,仅保留第一个出现的节点。删除的节点会保留在另一条链表上。简单来说就是去重,去掉绝对值相同的那些。先输出删除后的链表,再输出删除了的链表。
建立结构体节点,包括起始地址addr,下一个地址to,值value。链表数组索引为地址,接下来就是模拟链表的操作了,并且建立一个flag数组标记对应值K是否出现,若出现则flag[k]=addr,未出现则为-1,注意这里不能为0因为地址值存在为0的情况。最后的输出地址前面要补0,如果是链尾的话,-1则不需要补0。
代码:
#include#include #include #include #include using namespace std;const int maxn=100000+5;struct Node{ int addr; int value; int to;}node[maxn];int flag[maxn];int linkedlist[maxn]; //去重后的链表int removelist[maxn]; //删除节点组成的链表int main(){ int head,n; int a,b,c; for(int i=0;i =1){ id=linkedlist[cnt1-1]; printf("%05d %d %d\n",node[id].addr,node[id].value,node[id].to); } for(int i=0;i =1){ id=removelist[cnt2-1]; printf("%05d %d %d\n",node[id].addr,node[id].value,node[id].to); } return 0;}