python鍊錶刪除尾部節點 刪除雙鏈表末尾節點

2021-10-11 14:47:18 字數 2712 閱讀 7567

刪除雙向鍊錶中的最後乙個節點需要遍歷鍊錶以便到達鍊錶的最後乙個節點,然後在該位置進行指標調整。

要刪除鍊錶的最後乙個節點,需要按照以下步驟操作。

如果鍊錶已經為空,則條件head == null將變為true,因此無法繼續操作。

如果鍊錶中只有乙個節點,則條件head->next == null變為true。 在這種情況下,只需要將鍊錶的頭部分配為null並釋放頭部,以便完全刪除列表。

否則,只需遍歷鍊錶即可到達鍊錶的最後乙個節點。這將通過使用以下語句來完成。ptr = head;

if(ptr->next != null)

ptr = ptr -> next;

ptr將指向for迴圈結束時鍊錶的最後乙個節點。 只需將ptr的上乙個節點的next指標設為null即可。ptr -> prev -> next = null;

將要刪除的節點的指標釋放。

free(ptr);

演算法步驟

第1步:if head = null

轉到第7步

[if結束]

第2步:設定temp = head

第3步:重複第4步,temp-> next!= null

第4步:設定temp = temp-> next

[迴圈結束]

第5步:set temp - > prev-> next = null

第6步:釋放temp

第7步:退出

示意圖c語言實現的示例** -

#include

#include

void create(int);

void last_delete();

struct node

int data;

struct node *next;

struct node *prev;

struct node *head;

void main()

int choice, item;

doprintf("2.delete node from end\n");

printf("3.exit\n");

printf("4.enter your choice ? ");

scanf("%d", &choice);

switch (choice)

case 1:

printf("enter the item\n");

scanf("%d", &item);

create(item);

break;

case 2:

last_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));

if (ptr == null)

printf("overflow\n");

else

if (head == null)

ptr->next = null;

ptr->prev = null;

ptr->data = item;

head = ptr;

else

ptr->data = item;

ptr->prev = null;

ptr->next = head;

head->prev = ptr;

head = ptr;

printf("node inserted\n");

void last_delete()

struct node *ptr;

if (head == null)

printf("underflow\n");

else if (head->next == null)

head = null;

free(head);

printf("node deleted\n");

else

ptr = head;

if (ptr->next != null)

ptr = ptr->next;

ptr->prev->next = null;

free(ptr);

printf("node deleted\n");

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

2.delete node from end

3.exit

4.enter your choice?1

enter the item

node inserted

2.delete node from end

3.exit

4.enter your choice?1

enter the item

node inserted

2.delete node from end

3.exit

4.enter your choice?2

node deleted

¥ 我要打賞

糾錯/補充

收藏加qq群啦,易百教程官方技術學習群

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

刪除鍊錶節點

問題描述 給出單鏈表頭指標以及要刪除節點的位址,要求寫 刪除這個節點,並且時間複雜度為o 1 如何實現?分析 1 應變能力 2 對時間複雜度的理解 平常思路 prev next temp next free temp 但是該思路的時間複雜度為o n 解題 不能從phead開始找,入口在所要刪除的節點...

鍊錶刪除節點

define crt secure no warnings include include typedef struct linknode lk,lk 有頭鍊錶的初始化 lk initlinknode 初始化頭結點 headnode num 1 頭結點不維護資料域,這行 可寫可不寫 headnode...

鍊錶 刪除鍊錶的節點

劍指offer的乙個題,題目是要求在最少的時間內刪除鍊錶的節點。問題分析 對於鍊錶的刪除,按照劍指offer的一貫思路就是展開討論 1 空鍊錶咋辦 待刪除的節點是空節點咋辦 2 要刪除的節點在鍊錶中的位置有三種情況 1 鍊錶只有乙個節點,待刪除節點是表頭又是尾節點 2 鍊錶有多個節點,待刪除的節點是...