列表

详情


XM17. 找出单向链表中的一个节点,该节点到尾指针的距离为K

描述

找出单向链表中的一个节点,该节点到尾指针的距离为K。链表的倒数第0个结点为链表的尾指针。要求时间复杂度为O(n)。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
}
链表节点的值初始化为1,2,3,4,5,6,7。

输入描述

该节点到尾指针的距离K

输出描述

返回该单向链表的倒数第K个节点,输出节点的值

示例1

输入:

2

输出:

6

原站题解

C 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2020-12-25

#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
    int m_nKey;
    struct ListNode *m_pNext;
}*newl;
int main()
{
    int k;
    scanf("%d",&k);
    int i;
    struct ListNode *newlist=(struct ListNode*)malloc(sizeof(struct ListNode));
    newlist->m_nKey=1;
    newlist->m_pNext=NULL;  
    struct ListNode *head=newlist;
    for(i=2;i<=7;i++){
        struct ListNode *tmp=(struct ListNode*)malloc(sizeof(struct ListNode));
        tmp->m_nKey=i;
        tmp->m_pNext=NULL;
        head->m_pNext=tmp;
        head=tmp;
    }
    
    int cnt=1;
    head=newlist;
    while(head){
        if(cnt==(8-k)){
            printf("%d\n",head->m_nKey);
            return 0;
        }
        cnt++;
        head=head->m_pNext;
    }
    return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 372KB, 提交时间: 2020-08-10

#include<stdio.h>
typedef struct Node{
    int val;
    struct Node *next;
}ListNode;
//创建节点
ListNode *CreateNode(int data)
{
    ListNode *newnode=(ListNode*)malloc(sizeof(ListNode));
    newnode->val=data;
    newnode->next=NULL;
    return newnode;
}
void insertNode(ListNode *head,ListNode *newnode)//向链表中插入节点
{
    ListNode *p=head;
    while(p->next!=NULL)
    {
        p=p->next;
    }
    p->next=newnode;//连接新节点和当前节点
    newnode->next=NULL;
}
int main()
{

       int k;
       scanf("%d",&k);
       int data[7]={1,2,3,4,5,6,7};
       ListNode *head=CreateNode(0);
       for(int i=0;i<7;i++)
       {
          insertNode(head,CreateNode(data[i]));//参数是头结点head和新节点,注意是节点不是节点的值
       }
        ListNode *p=head;
       if(k>0&&k<=7)//要求加节点与找节点的操作复杂度均为O(n)
       {
           for(int i=0;i<=7-k;i++)
           {
               p=p->next;
           }
           printf("%d\n",p->val);
       }
        else 
        {
            printf("0\n");
        }
    
    
    return 0;
}

上一题