算法---查找倒数第k个链表的值
生活随笔
收集整理的這篇文章主要介紹了
算法---查找倒数第k个链表的值
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
算法—查找倒數(shù)第k個鏈表的值
代碼:
link.h
#pragma once #define elemType int #include<stdlib.h> typedef struct link {elemType data;struct link * next; }link; bool initLink(link* &Link) {//初始化鏈表Link = (link*)malloc(sizeof(link));Link->next = NULL;if (!Link) {return false;}return true; } int getLinkElem(link* &Link,int i) {//獲取鏈表的第i個元素link* p = Link;int j = 0;while (p&&j < i) {p = p->next;j++;}if (j >= i || !p) {return -1;}int v = p->data;return v; } bool LinkTailInsert(link* &Link, int i,int e) {//鏈表的第i個位置插入元素link* p = Link;link*s = (link*)malloc(sizeof(link));s->data = e;int j = 0;while (p&&j < i - 1) {p = p->next;j++;}if (!p || j > i - 1) {return false;}s->next = p->next;p->next = s;return true; } bool deleteLinkElem(link* &Link,int i) {//刪除鏈表的第i個元素int j = 0;link* p = Link,*q;while (p&&j < i - 1) {p = p->next;j++;}if (!p || j > i - 1) {return false;}q = p->next;p->next = q->next;delete q;return true; } void printLink(link* Link) {//遍歷鏈表link *p = Link->next;while (p) {printf("%d ", p->data);p = p->next;}printf("\n"); }main.c
#include <stdio.h> #include <stdlib.h> #include"link.h" int checkTheLastElem(link* Link, int k) {//查找鏈表中倒數(shù)第k個元素link *p = Link;//帶頭結點(頭指針)link *q = Link;int count = 0;while (p) {if (count < k) {count++;}else {q = q->next;//q指針只有k>}p = p->next;//p指針一直移動}if (count < k) {printf("查找倒數(shù)第%d個元素失敗\n",k);return 0;}else {printf("查找倒數(shù)第%d個元素成功!為%d\n", k,q->data);return 1;} } int main() {link* Link;initLink(Link);int i = 0;while (i<3) {int v;scanf_s("%d", &v);LinkTailInsert(Link, 1,v);i++;}printf("遍歷鏈表:");printLink(Link);//遍歷checkTheLastElem(Link, 1);//查找倒數(shù)第一個元素printf("\n");system("pause");return 0; }測試截圖:
時間復雜度O(n),空間復雜度O(1)
如果存在什么問題,歡迎批評指正!謝謝!
總結
以上是生活随笔為你收集整理的算法---查找倒数第k个链表的值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法---字符串顺序平移
- 下一篇: 长期不吃早饭会瘦吗