當前位置:首頁 » 網路管理 » 如何刪除鏈表最後一個節點
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何刪除鏈表最後一個節點

發布時間: 2022-08-01 13:33:30

1. 單鏈表刪除最後一個結點的問題(請注意:我刪除的是最後一個結點)

都可以。
free(q)後,p->next 不會指向NULL,而是指向一個不安全的內存地址,即懸垂指針,需要你自己賦值為NULL

2. 如何刪除單鏈表的尾結點是用p-next-next=null還是先找到尾結

設兩個指針就好了。。void delete(LinkList &L){ LNode *p=L; LNode *q; while(p->next!=NULL){ q=p; p=p->next; } q->next=NULL; delete(p);}

3. 刪除節點(鏈表)

void
del(list
l){//這么個函數請大俠指教,刪除頭節點總是失敗(原因見下)
node
*p,*q;
char
name[12];
不能向p分配
gets(name);
p=l;
while
(strcmp(name,p->name)
&&
p->next!=null)//循環查找
{
q=p;
p=p->next;
}
if(!strcmp(name,p->name))
{
if(p==l)
l=p->next;//刪頭節點,跟蹤到這,l確實指向下一節點
else
q->next=p->next;//中間節點
printf("刪除記錄成功。\n");
不能釋放p。。。。l是指向p的
}//

4. 若某鏈表中最常用的操作是在最後一個結點之後插入一個結點和刪除最後一個結點,

選D。某線性表中最常用的操作是在最後一個元素之後插入一個元素和刪除第一個元素,則採用僅有尾指針的單循環鏈表存儲方式最節省運。

僅有尾指針的單循環鏈表,可以非常方便地找到尾結點,尾結點後面的第一個結點往往是頭結點,頭結點的下一個結點就是第線性表的第一個結點。對最後一個元素和第一個元素操作對帶尾指針的單循環鏈表是非常方便的。

(4)如何刪除鏈表最後一個節點擴展閱讀:

使用只有表尾指針沒有表頭指針:

循環單鏈表指的是最後節點的指針域指向表頭節點,如果要刪除第一個元素,只需要通過表尾指針找到第二個節點,然後將最後節點的指針指向第二個節點,就將第一個元素刪除了;最後一個元素後面插入新元素時,先找到表頭,將新元素的指針域指向表頭,然後再將表尾指向新元素就好了。

單鏈表指的是最後節點的指針域指向表頭節點,如果要刪除最後一個元素,必須遍歷整個鏈表才能找到表尾,進行新元素的插入、再插入時的演算法復雜度為O(n)。

5. 演算法與數據結構,單鏈表,刪除最後一個元素。下面c語言程序是我自己寫的,然後中運行也是沒問題的,的確

不知道你說的刪除是什麼意思,是將整個節點都free還是只是把data置為Null。從你給的代碼來看,並沒有free掉最後一個節點。因為當從while循環跳出來後,指針p已經是指向最後一個了,所以p->next是Null,所以你最後一行free(p->next)實際上沒有起作用的。

如果你想真正刪除最後一個節點,將while循環的條件改為while(p->next&&p->next->next)即可,同時注意最後一個元素的鏈表刪除的情況。

6. c語言 刪除鏈表的某個節點

temp=p;
p=p->next;
temp->next=NULL;
這三句存在問題,temp=p,讓temp指向p所指向的節點,p=p->next,p指向後移
temp->next=NULL,讓temp的後繼為空,這里出了問題,
鏈表
從temp指向的節點斷開,相當於刪除p之後的所有節點。
應該先判斷p是不是最後節點
if(p->next==NULL)
如果是,只好去找p的前趨pre,讓pre->next=NULL,free(p)
如果不是最後節點,將p的後繼節點數值域復制給p,然後將p的後繼節點刪除,等同與刪除p
p->data=p->next->data;
p->next=p->next->next;
free(p);