#include<iostream>
using namespace std;
struct Node {
char x = ' ', y = ' ';//x存储0 y储存-或*,分别代表史莱姆和通电状况
int d_flag = 0;//相异的flag,0是前后相同,1,反之,前后相异
struct Node* next=NULL;
};
struct Node* head = NULL , * p = NULL, * r = NULL;
int main() {
//1.输入史莱姆及其关系
cout << "输入史莱姆0和通电情况-,输入x则停止输入"<<endl;
char x1='y', y1='y';
//cin >> x1 >> y1;
head = new Node;
r = head;
while (x1 != 'x') {
p = new Node;
x1 = getchar();
y1 = getchar();
p->x = x1;
p->y = y1;
p->next = NULL;
if(r!=NULL)
r->next = p;
r = p;
}
p = head->next;
//2.通过是否通电,判断前后是否相异
while (p->next != NULL) {
if (p->y == '-')p->d_flag = 1;
}
p = head->next;
while (p->next!= NULL) {
cout << p->d_flag << " ";
p = p->next;
}
//cout << p->d_flag;
}

修改如下,供参考:
#include<iostream>
using namespace std;
struct Node {
char x = ' ' , y = ' ';//x存储0 y储存-或*,分别代表史莱姆和通电状况
int d_flag = 0;//相异的flag,0是前后相同,1,反之,前后相异
struct Node* next = NULL;
};
struct Node* head = NULL , * p = NULL, * r = NULL;
int main() {
//1.输入史莱姆及其关系
cout << "输入史莱姆0和通电情况-,输入x则停止输入"<<endl;
char x1='y', y1='y';
//cin >> x1 >> y1;
head = new Node;
head->next = NULL;
r = head;
while (1) { //while (x1 != 'x')
if((x1 = getchar()) == 'x') break;
y1 = getchar();
p = new Node;
p->x = x1;
p->y = y1;
p->next = NULL;
//if(r!=NULL)
r->next = p;
r = p;
}
p = head; //p = head->next;
//2.通过是否通电,判断前后是否相异
while (p->next != NULL) {
p = p->next;
if (p->y == '-') p->d_flag = 1;
}
p = head; //p = head->next;
while (p->next != NULL){
p = p->next;
cout << p->d_flag << " ";
}
//cout << p->d_flag;
return 0;
}