python链表删除尾部节点_B015 删除链表尾部结点 ★★

所属年份:2010.9;2011.3;2012.3;

下列给定程序中已建立了一个带头结点的单向链表,在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。

请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。

#include

#include

#define N 8

typedef struct list {

int data;

struct list *next;

} SLIST;

void fun( SLIST *p)

{

SLIST *t, *s;

t=p->next;

s=p;

while(t->next != NULL) {

s=t;

/**********found**********/

t=t->___1___;

}

/**********found**********/

printf(" %d ",___2___);

s->next=NULL;

/**********found**********/

free(___3___);

}

SLIST *creatlist(int *a)

{

SLIST *h,*p,*q;

int i;

h=p=(SLIST *)malloc(sizeof(SLIST));

for(i=0; i

q=(SLIST *)malloc(sizeof(SLIST));

q->data=a[i];

p->next=q;

p=q;

}

p->next=0;

return h;

}

void outlist(SLIST *h)

{

SLIST *p;

p=h->next;

if (p==NULL) printf("\nThe list is NULL!\n");

else {

printf("\nHead");

do {

printf("->%d",p->data);

p=p->next;

} while(p!=NULL);

printf("->End\n");

}

}

int main()

{

SLIST *head;

int a[N]= {11,12,15,18,19,22,25,29};

head=creatlist(a);

printf("\nOutput from head:\n");

outlist(head);

printf("\nOutput from tail: \n");

while (head->next != NULL) {

fun(head);

printf("\n\n");

printf("\nOutput from head again :\n");

outlist(head);

}

return 0;

}

【参考答案】

(1)next  (2) t->data  (3) t

【考点分析】

本题考查:链表数据结构,结点的表示方法,掌握链表数据结构的基本思想;释放内存空间函数free()。

【解题思路】

填空1:因为是链表操作,所以要使t逐一往后移动,语句为t=t->next。

填空2:输出链表结点的数据域,即t->data。

填空3:使用free函数将t所指向的内存空间释放。释放内存空间函数free调用形式: free(void*p);。功能:释放p所指向的一块内存空间,p是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值