gpt4 book ai didi

c - 如何使用单循环打印链表的所有最后三个元素,下面是我使用了两个循环的代码?

转载 作者:行者123 更新时间:2023-11-30 15:31:38 24 4
gpt4 key购买 nike

如何使用单循环打印链表的所有最后三个元素,下面是我使用两个循环的代码?我需要使用单循环来打印所有最后 3 个元素。请不要将其标记为重复,因为已提出此问题,但答案是使用两个循环。谢谢 例子如果输入是 1 2 3 4 5 6 7 o/p 应该是 3 2 1?

   #include <stdio.h> 
#include <string.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};

void add_begin(struct node **ptr,int n)
{
struct node *temp;
temp=(struct node* )malloc(sizeof(struct node));
temp->data=n;
temp->next=*ptr;
*ptr=temp;
}

void display(struct node *ptr)
{
struct node *prevprev,*prev;
prevprev=prev=NULL;
while(ptr->next!=NULL) // here i am getting 3rd last element which is store prevprev
{
prevprev=prev;
prev=ptr;
ptr=ptr->next;
}

while(prevprev) // from prevprev (i.e last 3rd element ) i m printing till null
//i need to remove this loop and develop a logic in above loop?
{ // i am supposed to use single loop?
printf("%d\n",prevprev->data);
prevprev=prevprev->next;
}
}

main()
{
struct node *headptr=NULL;
add_begin(&headptr,1);
add_begin(&headptr,2);
add_begin(&headptr,3);
add_begin(&headptr,4);
add_begin(&headptr,5);
add_begin(&headptr,6);
add_begin(&headptr,7);
display(headptr);

}

最佳答案

删除第二个循环,因为您可以一次性打印三个值。所以改变这个:

   while(prevprev)    // from prevprev (i.e last 3rd element ) i m printing till null 
//i need to remove this loop and develop a logic in above loop?
{ // i am supposed to use single loop?
printf("%d\n",prevprev->data);
prevprev=prevprev->next;
}

printf("%d\n%d\n%d\n", prevprev->data, prevprev->next->data, prevprev->next->next->data);

关于c - 如何使用单循环打印链表的所有最后三个元素,下面是我使用了两个循环的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24630032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com