python链表删除尾部节点_删除单链表最后一个节点

从链表的末尾删除节点,有两种情况。

链表中只有一个节点,需要删除。

链表中有多个节点,链表的最后一个节点将被删除。

1. 链表中只有一个节点

条件head → next = NULL将继续存在,因此,链表的唯一节点head将被指定为null。 这将通过使用以下语句来完成。

ptr = head;

head = NULL;

free(ptr);

2. 链表中有多个节点

条件head→next = NULL将失败,因此,必须遍历节点才能到达链表的最后一个节点。

为此,只需声明一个临时指针temp并将其指定给链表的头部。还需要跟踪链表的倒数第二个节点。所以使用两个指针ptr和ptr1,其中ptr将指向最后一个节点,ptr1将指向链表的倒数第二个节点。通过使用以下语句来完成。

ptr = head;

while(ptr->next != NULL)

{

ptr1 = ptr;

ptr = ptr ->next;

}

现在,只需要使指针ptr1指向下一个节点为NULL,并且ptr将变释放。它将通过使用以下语句来完成。

ptr1->next = NULL;

free(ptr);

算法

第1步:IF HEAD = NULL

打印内存溢出。

转到第8步

[结束]

第2步:设置PTR = HEAD

第3步:重复第4步和第5步,同时PTR - > NEXT!= NULL

第4步:SET PREPTR = PTR

第5步:SET PTR = PTR - > NEXT

[循环结束]

第6步:SET PREPTR - > NEXT = NULL

第7步:释放PTR

第8步:退出

示意图 -

03c9f4d169360c87a9e47b33676f5b7d.png

C语言示例代码 -

#include

#include

void create(int);

void end_delete();

struct node

{

int data;

struct node *next;

};

struct node *head;

void main()

{

int choice, item;

do

{

printf("1.Append List\n");

printf("2.Delete node\n");

printf("3.Exit\n");

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

scanf("%d", &choice);

switch (choice)

{

case 1:

printf("\nEnter the item\n");

scanf("%d", &item);

create(item);

break;

case 2:

end_delete();

break;

case 3:

exit(0);

break;

default:

printf("\nPlease enter valid choice\n");

}

} while (choice != 3);

}

void create(int item)

{

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

if (ptr == NULL)

{

printf("\nOVERFLOW\n");

}

else

{

ptr->data = item;

ptr->next = head;

head = ptr;

printf("\nNode inserted\n");

}

}

void end_delete()

{

struct node *ptr, *ptr1;

if (head == NULL)

{

printf("\nlist is empty");

}

else if (head->next == NULL)

{

head = NULL;

free(head);

printf("\nOnly node of the list deleted ...");

}

else

{

ptr = head;

while (ptr->next != NULL)

{

ptr1 = ptr;

ptr = ptr->next;

}

ptr1->next = NULL;

free(ptr);

printf("\n Deleted Node from the last ...");

}

}

执行上面示例代码,得到以下结果 -

1.Append List

2.Delete node

3.Exit

4.Enter your choice?1

Enter the item

12

Node inserted

1.Append List

2.Delete node

3.Exit

4.Enter your choice?2

Only node of the list deleted ...

¥ 我要打赏

纠错/补充

收藏

上一篇:链表

下一篇:双链表

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。


版权声明:本文为weixin_34666714原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。