【题目】
原文:
2.2 Implement an algorithm to find the nth to last element of a singly linked list.
译文:
实现一个算法从一个单链表中返回倒数第n个元素。
【分析】
(1)创建两个指针p1和p2,指向单链表的开始节点。
(2)使p2移动n-1个位置,使之指向从头开始的第n个节点。(意思是就是使p1和p2距离n个位置)
(3)接下来检查p2 - > = = null 如果yes返回p1的值,否则继续移动p1和 p2如果接下来p2为null意味着p1指向从结尾开始计算的第n个节点。
(4)重复第三步
【代码】
/*********************************
* 日期:2014-5-18
* 作者:SJF0115
* 题目: 寻找单链表倒数第n个元素
* 来源:CareerCup
**********************************/
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* nthToLast(ListNode* head,int n){
//head 带有头结点的单链表
if(head->next == NULL || head == NULL || n <= 0){
return NULL;
}
int i;
ListNode* p1 = head->next;
ListNode* p2 = head->next;
//p2移动n-1个位置
for(i = 1;i <= n-1;i++){
//总共元素不到n个
if(p2 == NULL){
return NULL;
}
p2 = p2->next;
}
//p2移动至末尾则p1移动到倒数第n个元素
while(p2->next != NULL){
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
int main(){
int i,j;
//freopen("C:\\Users\\XIAOSI\\Desktop\\acm.txt","r",stdin);
ListNode *head = (ListNode*)malloc(sizeof(ListNode));
head->next = NULL;
ListNode *node;
ListNode *pre = head;
int A[] = {6,5,3,3,6,5,6,7,3,7,1,2,1,4,6,7,2,3};
for(int i = 0;i < 18;i++){
node = (ListNode*)malloc(sizeof(ListNode));
node->val = A[i];
node->next = NULL;
pre->next = node;
pre = node;
}
node = nthToLast(head,18);
if(node != NULL){
cout<<node->val<<endl;
}
else{
cout<<""<<endl;
}
return 0;
}
分享到:
相关推荐
很多大公司的面试题,查找单链表倒数第N个节点
取单链表倒数第k个元素,包括算法描述、算法思想,算法实现等
数据结构单链表练习:删除单链表的倒数第n个节点。 博客地址:https://blog.csdn.net/qq_39400324/article/details/122640229
19. 删除链表的倒数第N个节点 难度: 中等 题目分析: 链表中的题目,指针相当于免费资源,可以根据需要增加。双指针法、快慢指针法在环形链表,应用很多。 解法一: # 对于这种题目,循环结束条件设为快指针到达...
单链表中查找倒数第n个元素2010-07-30通过一次遍历找到单链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,不能和n有关。
一次遍历单链表删除倒数第n个节点的问题,跟删除某个节点的前一个节点是一个思路
通过一次遍历找到单链表中倒数第 n 个节点。
链表功能的一个扩展延伸,查找倒数第K个元素,是某年考研题
输出单链表倒数第K个结点值.cpp
C CODE FOR :只遍历一遍找出单链表的倒数第K个节点
题目:输入一个单向链表,输出该链表中倒数第k个结点。...分析:使用两个指针,low,fast,先把fast的指针指向第k个元素,然后low和fast同时向后遍历,当fast遍历到结尾时,low正好遍历到倒数第k个。
javaScript实现一个单链表,找到单链表中的倒数第n个节点
cout倒数第"个元素为"<<little->data; } void main() { int a[100]; int length; int l; int k=2; cout请输入单链表的长度:"; cin>>length; for(int i=0;i;i++) { a[i]=i+1; } cout; LinkList...
删除链表中倒数第N个结点后,返回结果链表的首结点
主要为大家详细介绍了python实现单链表中删除倒数第K个节点的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了C++实现单链表删除倒数第k个节点的方法,结合实例形式分析了C++单链表的定义、遍历及删除相关操作技巧,需要的朋友可以参考下
只遍历一次单向链表,找到倒数第N个结点,
python 删除链表中倒数第N个节点(csdn)————程序
本文提供了找出链表倒数第n个节点元素的二个方法,其中一个方法是JAVA代码实现