当前位置: 代码迷 >> 综合 >> 数据结构(链表双指针)2020-08-10
  详细解决方案

数据结构(链表双指针)2020-08-10

热度:80   发布时间:2024-02-09 03:57:46.0

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

输入:1->2->3->4->5 和 k = 2

输出: 4

方法一:

int kthToLast(struct ListNode* head, int k){int count=0;int i;int res;struct ListNode *p = head;while(p!=NULL){p = p->next;count++;}p = head;for(i = 0;i<count-k;i++){p = p->next;}res = p->val;return res;
}

先循环得出链表长度,链表长度-k+1为正序数,遍历寻找输出,较为蠢。

方法二:

int kthToLast(struct ListNode* head, int k){struct ListNode* fast=head,*slow=head;while(fast){//当 fast为空时,slow正好指向倒数第 K 个结点if(k>0){ //若 k 大于0 ,则 flash 先跑fast = fast->next;k--;}else{ fast = fast->next;slow  = slow->next; }}return slow->val;
}

双指针用法,倒数第k个,就让一个指针先跑k个结点。复杂度小于上面那个。