DELPHI中的連結串列問題,刪除節點的時候我把上指標移到下節點頭,跳過的那個節點的記憶體怎麼釋放謝謝

2023-01-04 02:46:01 字數 2400 閱讀 6270

1樓:匿名使用者

先用一個指標標記要釋放的那個節點,然後把前後兩個節點連結,最後釋放指標指向的這個節點。舉個例子,假設head是連結串列頭,現在要刪除連結串列中的第i個節點:

type

pnode = ^tnode;

tnode = record

data: integer;

next: pnode;

end;

procedure deletenode(var head: pnode; index: integer);

varcur, p: pnode;

i: integer;

begin

if (head = nil) or (index < 1) then exit;

if index = 1 then

begin

p := head;

head := p^.next;

dispose(p);

exit;

end;

cur := head;

i := 1;

while (i < index - 1) and (cur <> nil) do

begin

cur := cur^.next;

inc(i);

end;

if cur = nil then exit;

p := cur^.next;

if p <> nil then

begin

cur^.next := p^.next;

dispose(p);

end;

end;

2樓:20100621夏至

a->下一個= a->下一步 - >下一步;(刪除節點b,我想問一下,是不是在這裡加一個免費的(b)必須考慮刪除的節點b?)

首先a->下一個= a->下一步 - >下指的不僅僅是一個指標,指向c刪除bb不說,還有隻在記憶體中,ac,再進行後續的關係失去自由釋放的b

背後p = p->下無法刪除節點的節點,但向後移動指標p的理解

一個連結串列不知道頭結點,有一個指標指向其中一個結點,請問如何刪除這個指標指向的結點。

3樓:big蛇

要刪除連結串列中的一個結點,必須知道該結點的前一個和後一個結點(頭尾結點除外),否則無法完成。如a→b→c→d連結串列,要刪除b結點,只需把a指向c,再把b釋放記憶體即可。如只知道b,而不知道a,則刪除了b就無法把a與c相連

4樓:

將這個節點複製成下一個節點的值,然後刪除下一個節點node *p; // 當前節點

node *q;

q = p -> next;

p.data = q.data; // 複製q節點到pp -> next = q -> next; // 刪除qfree(q);

c語言的單向連結串列刪除節點的問題

5樓:

if(ptemp->inumber==a)//用於判斷學號是否等於輸入值

else//不是頭結點

}ppre=ptemp;

ptemp=ptemp->pnext;

每回釋放ptemp後要重新給值

6樓:青春無情

全部遍歷一次,while(p!=null)就可以了把if判斷放到while裡面,還有你的那個頭結點是不應該放資料的,不需要判斷

7樓:匿名使用者

struct node*deletnode(struct node*head,int delet_age)

p=head;

while(p!=null)

p=p->next;

}return head;

}沒有上機,樓主可以測試一下。

連結串列中的頭結點算不算第一個結點?如果我對連結串列實行刪除操作,刪除第i個結點,那i包不包括頭結點?

8樓:匿名使用者

頭結點是第一結點,只是一般沒有資料

頭結點後面是首元結點,即第一個存放資料的結點做刪除操作時,一般需要返回所刪除結點的資料,所以一般不刪除頭結點如果你執意要刪的話,當然也可以,

因為連結串列分為有頭結點的連結串列和無頭結點的連結串列

9樓:匿名使用者

頭結點算一個節點,裡面沒有值,它的作用就是通過它來遍歷整個連結串列,要刪除節點的話也需要頭結點找到某一個節點在進行操作,頭結點不能刪,刪了以後就找不到連結串列了

10樓:

如果不想刪除頭結點,在刪除節點中的函式中第一句寫p=p->next;

for(int i=0,inext;

n就是你想刪除的第幾個節點。。。。

關於連結串列插入刪除節點的問題

問等號兩邊互換這種問題還真少見。一般見的也就是某兩句的位置能否互換 s next p next 新結點指標域指向p的後繼結點 不能互換。你可以看到這句語句的上隔上一個語句s linklist malloc sizeof lnode 它是新malloc出來的,s裡面的東西都是 垃圾值 你如果把s的指標...

delphi中的小問題

簡單點吧,把label1.caption設定成10,然後 procedure tform1.timer1timer sender tobject begin label1.caption inttostr strtoint label1.caption 1 if strtoint label1.ca...

c語言關於刪除指定節點的問題,刪除第i個節點

void deletenode int i,struct nu head 上面是正確 因為p開始指向頭節點,也就是第一個節點,那麼移動一次,p指向是第二個節點 所以你的 k 0,1,2,i 1,移動了i 1次,p已經指向第i個節點了,而不是指向i 1個節點。並且是在執行完成 後,再移動位置,k再加1...