【九度OJ】:链表中倒数第K个节点

来源:互联网 发布:刚开的淘宝店铺如何运营 编辑:程序博客网 时间:2024/06/05 12:07

思路:
1,建链表
2,用双链表,将其中一个先循环到K位置,此时将第一个和第二个同时往后走,当第一个链表结束时第二个链表刚好到链表中的第K个节点

AC代码如下:

#include <stdio.h>#include <stdlib.h>typedef struct node{    int number;    struct node * next;}Node;int getK(Node *link,int k);int main(){    int n,k,i,temp;    int flag;    while(scanf("%d %d",&n,&k)!=EOF && n>=0 && n<=1000 && k>=0 && k<=1000 ){        Node *link = (Node *)malloc(sizeof(Node));        link->next = NULL;         flag = 0;         Node *tail;         tail = link;        for(i=0;i<n;i++){            scanf("%d",&temp);            Node *n = (Node *)malloc(sizeof(Node));            tail->next = n;            tail = n;            n->number = temp;        }        int numberK = getK(link,k);        numberK ==-1?printf("NULL\n"):printf("%d\n",numberK);    }    return 0;}int getK(Node *link,int k){    Node *p1,*p2;    int i;    if(link->next == NULL || k == 0)        return -1;    p1 = link->next;    for(i=1;i<k;i++){        if(p1->next == NULL)            return -1;        p1 = p1->next;    }    p2 = link->next;    while(p1->next!=NULL){        p1 = p1->next;        p2 = p2->next;    }    return p2->number;}
0 0