XM17. 找出单向链表中的一个节点,该节点到尾指针的距离为K
描述
找出单向链表中的一个节点,该节点到尾指针的距离为K。链表的倒数第0个结点为链表的尾指针。要求时间复杂度为O(n)。输入描述
该节点到尾指针的距离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; }