LintCode 链表倒数第n个节点

找到单链表倒数第n个节点,保证链表中节点的最少数量为n。

样例

给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.

分析:设两个指针 p1和p2,p1遍历到n-1的位置,p2从头开始遍历 当p1到链表尾部的时候,p2刚好到倒数n的位置

注意鲁棒性的考虑

/**
 * Definition of ListNode
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */
class Solution {
public:
    /**
     * @param head: The first node of linked list.
     * @param n: An integer.
     * @return: Nth to last node of a singly linked list.
     */
    ListNode *nthToLast(ListNode *head, int n) {
        // write your code here
        if(head==NULL||n==0)
        return NULL;

        ListNode *p1=head;
        ListNode *p2=NULL;
        for(int i=0;i<n-1;i++)
        {
            if(p1->next!=NULL)
            {
                p1=p1->next;
            }
            else
            return NULL;
        }
        p2=head;
        while(p1->next!=NULL)
        {
            p1=p1->next;
            p2=p2->next;
        }
        return p2;
    }
};

  

时间: 2024-10-15 11:14:53

LintCode 链表倒数第n个节点的相关文章

lintcode 容易题:nth to Last Node In List 链表倒数第n个节点

题目: 链表倒数第n个节点 找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. 解题: 某年408计算机考研题目 Java程序: /** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * thi

LintCode 166. 链表倒数第n个节点

找到单链表倒数第n个节点,保证链表中节点的最少数量为n. 样例 给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1. /** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ cla

【剑指offer】链表倒数第k个节点

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25662121 在Cracking the Code Interview上做过了一次,这次在九度OJ上测试,AC. 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为两个整数n和k(0<=n<=1000, 0<=k<=1000):n代表将要输入的链表元素的

求链表倒数第几个节点

使用两个指针,和判断一个链表是否形成环类似 代码: #include <iostream> #include <list> using namespace std; typedef struct node { int data; struct node *next ; }Node,*pNode; void creatNode( pNode &pHead ){ bool isFirst=true; pNode p,q; int temp; scanf("%d&quo

单链表的经典操作,查找链表倒数第k个节点,判断链表是否存在环,求环节点

#include<stdio.h>#include<stdlib.h> typedef struct date_list{    int data;    struct date_list* next;}mylist; mylist* creatlist(int x,mylist* p)        //用一个元素创建链表{    if(NULL == p)                         //链表创建必须判空    {        p = malloc(siz

链表(5)----查找链表倒数第K个节点

1.链表定义 typedef struct ListElement_t_ { void *data; struct ListElement_t_ *next; } ListElement_t; typedef struct List_t_{ int size; int capacity; ListElement_t *head; ListElement_t *tail; } List_t; 2.查找链表第K个节点数据 设置快慢指针,快指针超前慢指针k-1个节点,然后快慢指针再同时遍历链表,当快指

链表倒数第k个节点

题目:输入一个链表,输出该链表中倒数第k个结点. 思路:典型快慢指针,快指针先走k,然后快慢指针同步,快指针到末尾时满指针指向倒数第K个,注意控制下边界情况 public ListNode FindKthToTail(ListNode head,int k) { ListNode quick=head,slow=head; if(head==null||k==0) return null; while(k-->1){ if(quick.next==null) return null; quick

单链表倒数第K个节点的查找和显示

1.使用一个固定长度队列装链表段,当遍历到链表根时,返回队列头元素. class Node{ int value; Node next; public Node(int value){ this.value=value; } } public class Danlianbiao { public static void main(String[] args) { Node node=new Node(1); Node node2=node.next=new Node(2); Node node3

[Leetcode] remove nth node from the end of list 删除链表倒数第n各节点

Given a linked list, remove the n th node from the end of list and return its head. For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5. Note:  Give