为什么这个程序不起作用,我认为错误在链表分配中?

时间:2017-10-04 17:56:01

标签: c++ data-structures

#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没有执行,从此我没有获得所需的输出...

1 个答案:

答案 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]