#include <stdio.h>
#include <malloc.h>
int count = 0;//计算链表长度
typedef struct node
{
int num;
struct node* next;
}Node,*NODE;
void init_head(NODE *head)//初始化头指针
{
*head = NULL;
return;
}
void set_tail_node(NODE* head,NODE newnode)//用尾插创建链表
{
if(*head == NULL)//入口参数检查,看链表是否为空
{
newnode->next = NULL;
*head = newnode;
}
else
{
NODE temp = *head;
while((temp->next) != NULL)
{
temp = temp->next;
}
temp->next = newnode;
newnode->next = NULL;
}
}
void FREE(NODE* head)//释放链表的空间
{
NODE temp = *head;
while(temp != NULL)
{
*head = temp->next;
free(temp);
temp = *head;
}
}
void display(NODE head)//显示各个节点
{
NODE temp = head;
while(temp != NULL)
{
printf("num:%d\n",temp->num);
count += 1;
temp = temp->next;
}
return;
}
void del_tail(int num,NODE* head)//删除倒数第num个节点
{
int n;
int i;
NODE temp = *head;
NODE flag = temp->next;
n = count - num + 1;//将倒数转换成正向第n点
if(n == 1)
{
*head = temp->next;
free(temp);
}
if(n > 1)
{
for(i = 1; i <= (n - 2); i++)
{
temp = temp->next;
flag = temp->next;
}
temp->next = flag->next;
free(flag);
flag = NULL;
}
return;
}
int main()
{
int i;
int num;
NODE head;
NODE newnode;
init_head(&head);
for(i = 0; i < 10; i++)//创建各个节点并尾插
{
newnode = (struct node*)malloc(sizeof(struct node));
newnode->num = i + 1;
set_tail_node(&head,newnode);
}
display(head);
printf("input the number you want to delete in the tail of linked list\n");
scanf("%d",&num);
while((count - num + 1) < 1)
{
printf("the num you input is too large,input again\n");
scanf("%d",&num);
}
del_tail(num,&head);//删除倒数节点
display(head);
FREE(&head);//释放存储空间
return 0;
}
编写一个程序,实现删除链表中倒数第k个节点(用单链表实现)
最新推荐文章于 2023-07-08 14:06:32 发布