CareerCup之2.2 寻找单链表倒数第n个元素

简介:

【题目】

原文:

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;
}



目录
相关文章
|
SQL 存储 缓存
MySQL运行原理与基础架构!
下面是关于上述部件的介绍: connectors 与其他编程语言中的sql 语句进行交互,如php、java等。 Management Serveices & Utilities系统管理和控制工具 Connection Pool (连接池)管理缓冲用户连接,线程处理等需要缓存的需求 SQL Interface (SQL接口)接受用户的SQL命令,并且返回用户需要查询的结果。
|
JavaScript 前端开发
在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?
原文: 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样? 标签 上面的这段代码不能得到你想要的结果,因为在标记中href属性的this对象不是指代的当前的标记, 这个时候的this是指代的window对象,所以使用this.
967 0
|
Web App开发
【技术贴】ppt2003更换图片|更换带有动作特效的图片|替换ppt图片
ppt2007有替换图片的功能,但是我们的2003就这样悲催了么,答案肯定是否定的,ppt203也能够替换图片,只不过需要一个中间步骤,就是先转成html,然后修改files文件夹下的指定图片,随后用ppt打开此html文件之后,另存为ppt格式即可完成替换。
1452 0