思路分析
算法:统计链表的长度,把倒数k转为顺说的n,然后输出第n个节点的数据
图解
完整代码
//输出链表中的倒数第k个节点
//算法:统计链表的长度,把倒数k转为顺数的n,然后输出第n个节点的数据
void ReverseShow(List plist, int k)
{printf("倒数第%d个节点,", k);//倒数第-1个节点,errorif (k <= 0)//数据错误{printf("k必须大于0!\n");return;}int len = 0;//统计长度Node* p;//初始化为头节点的后继节点for (p = plist->next; p != NULL; p = p->next)//统计长度len++;//printf("长度为%d", len);//k的值不能大于链表的长度if (k > len){printf("k大于链表长度,错误!\n");return;}int n = len - k + 1;//把倒数第k转为顺数第n,从1开始p = plist->next;//第一个数据节点for (int i = 1; i < n; i++) //p走到第n个节点p = p->next;printf("%d\n", p->data);
}int main()
{Node head;InitList(&head);for (int i = 0; i < 10; i++)Insert_tail(&head, i);Show(&head);ReverseShow(&head, 0);ReverseShow(&head, 1);ReverseShow(&head, 5);ReverseShow(&head, 10);ReverseShow(&head, 15);return 0;
}
本篇完!