#include <iostream>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char const *argv[]) {
struct sam{
int data;
struct sam *next;
};
struct sam node[11];
for(int i=0;i<10;i++){
node[i].data = i/2;
node[i].next = &node[i+1];
}
node[10].next=NULL;
for (size_t i = 0;node[i].next!=NULL; i++) {
std::cout <<node[i].data<< '\t';
}
std::cout << '\n';
for(int i=0;node[i].next->next!=NULL;i++){
if(node[i].data == node[i].next->data){
node[i].next = node[i].next->next;
}
}
for (size_t i = 0;node[i].next!=NULL; i++) {
std::cout << "Data is " <<node[i].data<< '\t';
}
return 0;
}
目标是从已排序的链接列表中删除重复项 我已经随机分配了0,0,1,1,2,2,3,3,4,4到列表中 行节点[i] .next = node [i] .next-&gt; next没有执行,从此我没有获得所需的输出...
答案 0 :(得分:1)
原始节点数组
+-------------------------------------------------+
data | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | Garbage |
+-------------------------------------------------+
Next 1 2 3 4 5 6 7 8 9 10 NULL
设置下一个
+-------------------------------------------------+
data | 0 | 0 | 1 | 1 | 2 | 2 | 3 | 3 | 4 | 4 | Garbage |
+-------------------------------------------------+
Next 2 2 4 4 6 6 8 8 10 10 NULL
因此,如果您使用下一个指针从头节点转到下一个节点 - 您将看到过滤列表
但是,由于您使用原始索引方法 - 您仍然可以看到所有节点。
我接下来只显示索引而不是实际指针值 - 所以你看到Next == 2 - 它意味着指针转到数组成员节点[2]