亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

p2是一個只分配過一次內存的存儲空間,每次都把p1往p2里寫不會覆蓋嗎?

p2不是只在循環體前分配過一次內存嗎?第二次賦值后為什么沒有覆蓋掉之前的節點?我腦袋有點轉不過來

正在回答

3 回答

這是鏈表的知識啊 else?p2->next?=?p1; ?在這句代碼里面P2->next ?指向了P1 ?然后把P1的值付給了P2 ?這個時候的 P2是另外一個內存空間 ? 下一次用是不會覆蓋上一次的地方的 ?P2最后會指向 最后一個節點 ?只需要找到頭指針 ?根據鏈表的性質就可以輸出整個鏈表了?

1 回復 有任何疑惑可以回復我~
#1

有話好說別打臉 提問者

謝謝,聽你這么解釋一下腦子好像轉過彎來了
2015-12-03 回復 有任何疑惑可以回復我~
#2

有話好說別打臉 提問者

非常感謝!
2015-12-03 回復 有任何疑惑可以回復我~
//動態鏈表??同樣具有頭指針??每個節點包含數據和指向下一個節點的指針

#include<stdio.h>
#include<malloc.h>
struct?weapon?{
	int?price;
	int?atk;
	struct?weapon?*?next;?//?定義鏈表結構體?這行是指針
};

struct?weapon?*?create(){??//創建鏈表的函數
	struct?weapon?*head;??//頭指針
	struct?weapon?*p1,?*p2;?//兩個指針變量?一個指向新創的?一個指向上一個節點
	int?n=0;?//計算節點個數
	p1=p2=(struct?weapon?*)malloc(sizeof(struct?weapon));?//malloc?分配內存塊的函數??sizeof?判斷數據類型長度符
	scanf("%d,%d",&p1->price,&p1->atk);?//輸入數據到第一個節點
	head=NULL;?//初值置空
	while(p1->price!=0){??//判斷輸入結束條件
		n++;
		if(n==1)?head=p1;??//第一個節點讓head指向這個節點
		else?p2->next?=?p1;??//如果不是第一個節點?讓上一個節點的next指向新節點

		p2=p1;??//每一次把新節點保存到p2
		p1=(struct?weapon?*)malloc(sizeof(struct?weapon));?//給p1重新分配空內存塊
		scanf("%d,%d",&p1->price,&p1->atk);?//繼續往p1寫入數據??(從else開始執行)
	}
	p2->next?=?NULL;?//寫入完成后給最后一個節點的指向賦空
	return?(head);
}

int?main(){
	return?0;
}



0 回復 有任何疑惑可以回復我~

能把代碼弄出來嗎??

0 回復 有任何疑惑可以回復我~
#1

有話好說別打臉 提問者

下面補上了按自己理解注釋的代碼,就是第24行那個p2=p1我不理解,為什么可以循環往p2賦值并且生成鏈表
2015-12-03 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

p2是一個只分配過一次內存的存儲空間,每次都把p1往p2里寫不會覆蓋嗎?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號