数据结构与算法3:链表2

来源:互联网 发布:网络电视机顶合 编辑:程序博客网 时间:2024/06/04 18:40

找到链表中倒数第K个节点

使用两个指针实现,一个指针先走K步,然后开始一起走动;类似的题目找到链表的中间节点,可以使用快慢指针,一个指针走一步,另一个指针走两步

#include <stdlib.h>#include <stdio.h>typedef struct tag_LinkNode{    int data;   struct tag_LinkNode *next; } LinkNode;LinkNode * init_link(int num){    LinkNode *head = NULL;    LinkNode *pstLink;    num = 2*num;    while(num > 0)    {        pstLink = (LinkNode *)malloc(sizeof(LinkNode));        pstLink->data = num/2;        if (!head)        {            head = pstLink;            head->next = NULL;            continue;        }        pstLink->next = head->next;        head->next = pstLink;                num--;    }        return head;}void destory_link(LinkNode *head){    LinkNode *pstLink;        pstLink = head;    while(pstLink != NULL)    {        head = head->next;        free(pstLink);        pstLink = head;    }}void print_link(LinkNode *head){    LinkNode *pstLink;    int num = 0;        pstLink = head;    while(pstLink != NULL)    {        printf("%d:%p:%d\n", num++, pstLink, pstLink->data);        pstLink = pstLink->next;    }    printf("\n");}LinkNode * find_last_k_node(LinkNode *head, int k){    LinkNode *pstCurrent = head;    LinkNode *pstRunning = head;            while(!(pstRunning == NULL || 0 == k))    {        pstRunning = pstRunning->next;         k--;    }        /* 表示长度没有K长 */    if (0 != k)    {        printf("bad k\n");        return NULL;    }        while (NULL != pstRunning)    {       pstRunning = pstRunning->next;        pstCurrent = pstCurrent->next;    }        printf("find:%p:%d\n", pstCurrent, pstCurrent->data);    return pstCurrent;}int main(int argc, char *args[]){    LinkNode *head;    int num, k;        if (argc != 3)    {        printf("use a.out num k\n");        return 1;    }        num = atoi(args[1]);    k = atoi(args[2]);        head = init_link(num);    print_link(head);    find_last_k_node(head, k);    destory_link(head);        return 0;}

效果:

root@ubuntu:/home/cling60/src/struct/LinkedList# ./a.out 10 210:0x82d6008:101:0x82d6148:02:0x82d6138:13:0x82d6128:14:0x82d6118:25:0x82d6108:26:0x82d60f8:37:0x82d60e8:38:0x82d60d8:49:0x82d60c8:410:0x82d60b8:511:0x82d60a8:512:0x82d6098:613:0x82d6088:614:0x82d6078:715:0x82d6068:716:0x82d6058:817:0x82d6048:818:0x82d6038:919:0x82d6028:920:0x82d6018:10find:0x82d6008:10root@ubuntu:/home/cling60/src/struct/LinkedList# ./a.out 10 220:0x8766008:101:0x8766148:02:0x8766138:13:0x8766128:14:0x8766118:25:0x8766108:26:0x87660f8:37:0x87660e8:38:0x87660d8:49:0x87660c8:410:0x87660b8:511:0x87660a8:512:0x8766098:613:0x8766088:614:0x8766078:715:0x8766068:716:0x8766058:817:0x8766048:818:0x8766038:919:0x8766028:920:0x8766018:10bad k


原创粉丝点击