给定元素序列:{15,11,18,6,3,5,9},如果确定采用单链表存储数据,请你设计一个速度最快的算法,实现查找倒数第k个元素结点。要求: (1)描述算法的核心设计思想 (2)写出算法的C语言代码 (3)分析算法的时间复杂度
时间: 2024-02-13 16:04:45 浏览: 74
查找倒数第N个结点(单链表)
1. 算法核心设计思想
算法核心设计思想是采用双指针法,定义两个指针p和q,p指向链表头节点,q指向第k个节点,然后p和q同时向后移动,直到q指向链表尾节点,此时p指向的节点就是倒数第k个节点。
2. 算法C语言代码
```
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* findKthToTail(struct ListNode* head, int k){
struct ListNode *p = head, *q = head;
int i;
for (i = 0; i < k && q != NULL; i++) {
q = q->next;
}
if (i < k) {
return NULL;
}
while (q != NULL) {
q = q->next;
p = p->next;
}
return p;
}
```
3. 算法时间复杂度分析
算法的时间复杂度为O(n),其中n为单链表的长度。因为算法只需要遍历一次单链表,所以时间复杂度为线性的。
阅读全文