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 个群。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值