問題描述】建立一個鏈表,每個結點包括:姓名、年齡。輸入一個年齡,如果鏈表中的結點所包含的年齡等于此年齡,則將此結點刪去。
【輸入形式】首先待輸入數(shù)據(jù)個數(shù),然后輸入每個結點信息;輸入完成后,輸入待刪除結點的年齡信息。
【輸出形式】若在鏈表中找到待刪除數(shù)據(jù)則刪除該結點并顯示刪除后的鏈表,若沒有找到數(shù)據(jù)則輸出“no data”。
【樣例輸入】
4
mu 20
yu 21
qu 19
ku 20
20
【樣例輸出】
yu 21
qu 19
【樣例輸入】
4
mu 20
yu 21
qu 19
ku 20
9
【樣例輸出】
no data
我的代碼
int flag = 0;
struct stu {
char name[12];
int age;
struct stu *next;
};
struct stu *creat(int n)
{
struct stu*head = NULL;
struct stu *p1, *p2;
p1 = p2 = new stu;
scanf("%s %d", p1->name, &p1->age);
for (int i = 1; i < n; i++)
{
if (i == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = new stu;
scanf("%s %d", p1->name, &p1->age);
}
p2->next = p1;
p2 = p1;
p2->next = NULL;
return head;
}
struct stu select(struct stuhead, int n,int m)
{
struct stu *p1 = head,*p2=p1,*temp=p1;
for (int i = 0;; i++) {
if (head->age == m) {
free(head);
head = p1->next;
p1 = head;
p2 = head;
flag = 1;
}
else if (p1->next != NULL) {
p2 = p1;
p1 = p1->next;
if (p1->age == m) {
p2->next = p1->next;
temp = p1;
p1 = p1->next;
free(temp);
flag = 1;
}
}
else if(p1->next==NULL&&p1->age==m) {
p2->next = NULL;
free(p1);
p1 = p2;
flag = 1;
}
if (p1->next == NULL && p1->age != m)
break;
}
return head;
}
int main()
{
struct stu*head,*p;
int m, n;
scanf("%d", &n);
head=creat(n);
scanf("%d", &m);
select(head, n, m);
if (flag == 0) {
printf("no data");
}
else {
p = head;
do {
printf("%s %d", p->name, p->age);
p = p->next;
} while (p != NULL);
}
system("pause");
return 0;
}
請各位幫我看看是哪里出錯了呢 NO DATA的情況下能輸出 其他情況則不能 編譯器提示P1沖突 是咋回事?感謝各位!!!!
首先,提問時麻煩把代碼格式調一下,太不舒服了。
==========================================
問題主要是你的select函數(shù)那邊,修改后如下:
struct stu * select(struct stu *head, int n, int m) // 函數(shù)返回類型注意一下,還有第一個參數(shù)類型
{
struct stu *p1 = head, *p2=p1, *temp=p1;
for (int i = 0;; i++) {
if (head->age == m) {
free(head);
head = p1->next;
p1 = head;
p2 = head;
flag = 1;
}
else if (p1->next != NULL) {
p2 = p1;
p1 = p1->next;
if (p1->age == m) {
p2->next = p1->next;
temp = p1;
p1 = p1->next;
free(temp);
flag = 1;
}
}
else if(p1->next==NULL && p1->age==m) {
p2->next = NULL;
free(p1);
p1 = p2;
flag = 1;
}
if (p1 == NULL) // 這里修改了
break;
}
return head;
}
// main 函數(shù)中調用
...
head = select(head,n, m);
...
你的select函數(shù)寫的有點復雜,可以看看我的:
struct stu * select(struct stu *head, int n, int m)
{
struct stu *p1 = head;
struct stu *p2 = p1;
while(p1) {
if(p1->age == m) {
flag = 1;
if(p1 == head) { // 第一個結點
head = p1->next;
delete p1;
p1 = p2 = head;
} else { // 不是第一個結點
p2->next = p1->next;
delete p1;
p1 = p2->next;
}
} else {
if(p1 != head ) {
p2 = p1;
}
p1 = p1->next;
}
}
return head;
}
// main 中調用方式不變北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產業(yè)為響應國家深化產教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經理職務負責iOS教學及管理工作。
浪潮集團項目經理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經驗。曾經歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。