日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux循环链表删除节点,删除循环单链表开头元素

發布時間:2025/4/5 linux 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux循环链表删除节点,删除循环单链表开头元素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要刪除循環單鏈表中的開頭節點,需要進行一些指針調整。

在開頭有三種從循環單鏈表中刪除節點的方案有以下幾種。

情況1 :(鏈表為空)

如果鏈表為空,則條件head == NULL將變為true,在這種情況下,只需要在屏幕上打印下溢并退出。

if(head == NULL)

{

printf("UNDERFLOW\n");

return;

}

情況2 :(鏈表包含單個節點)

如果鏈表只包含一個節點,則條件head->next == head將變為true。 在這種情況下,需要刪除整個鏈表并使頭指針空閑。 這將通過使用以下語句來完成。

if(head->next == head)

{

head = NULL;

free(head);

}

情況3 :(鏈表包含多個節點)

如果鏈表包含多個節點,那么在這種情況下,需要使用指針ptr遍歷鏈表以到達列表的最后一個節點。 這將通過使用以下語句來完成。

ptr = head;

while(ptr -> next != head){

ptr = ptr -> next;

}

在循環結束時,指針ptr指向鏈表的最后一個節點。 因為,鏈表的最后一個節點指向鏈表的頭節點。 因此,這將改變為現在,鏈表的最后一個節點將指向頭節點的下一個節點。

ptr->next = head->next;

現在,通過使用C語言中的free()函數釋放頭指針。

free(head);

使節點指向最后一個節點的下一個節點,即鏈表的新頭。

head = ptr->next;

這樣,節點將從一開始就從循環單鏈表中刪除。

算法

第1步:IF HEAD = NULL

提示內存溢出

轉到第8步

[IF結束]

第2步:設置PTR = HEAD

第3步:在PTR->NEXT!= HEAD 時重復第4步

第4步:SET PTR = PTR->next

[循環結束]

第5步:設置PTR->NEXT = HEAD->NEXT

第6步:免費頭

第7步:SET HEAD = PTR->NEXT

第8步:退出

示意圖

C語言實現代碼

#include

#include

void create(int);

void beg_delete();

struct node

{

int data;

struct node *next;

};

struct node *head;

void main()

{

int choice, item;

do

{

printf("1.Append List\n2.Delete Node from beginning\n3.Exit\n4.Enter your choice?");

scanf("%d", &choice);

switch (choice)

{

case 1:

printf("Enter the item\n");

scanf("%d", &item);

create(item);

break;

case 2:

beg_delete();

break;

case 3:

exit(0);

break;

default:

printf("Please Enter valid choice\n");

}

} while (choice != 3);

}

void create(int item)

{

struct node *ptr = (struct node *)malloc(sizeof(struct node));

struct node *temp;

if (ptr == NULL)

{

printf("OVERFLOW");

}

else

{

ptr->data = item;

if (head == NULL)

{

head = ptr;

ptr->next = head;

}else

{

temp = head;

while (temp->next != head)

temp = temp->next;

ptr->next = head;

temp->next = ptr;

head = ptr;

}

printf("Node Inserted\n");

}

}

void beg_delete()

{

struct node *ptr;

if (head == NULL)

{

printf("UNDERFLOW\n");

}else if (head->next == head)

{

head = NULL;

free(head);

printf("Node Deleted\n");

}else

{

ptr = head;

while (ptr->next != head)

ptr = ptr->next;

ptr->next = head->next;

free(head);

head = ptr->next;

printf("Node Deleted\n");

}

}

執行上面示例代碼,得到以下結果 -

1.Append List

2.Delete Node from beginning

3.Exit

4.Enter your choice?1

Enter the item

12

Node Inserted

1.Append List

2.Delete Node from beginning

3.Exit

4.Enter your choice?2

Node Deleted

¥ 我要打賞

糾錯/補充

收藏

加QQ群啦,易百教程官方技術學習群

注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。

總結

以上是生活随笔為你收集整理的Linux循环链表删除节点,删除循环单链表开头元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。