单链表输出倒数第k个结点值(栈实现)
思路1:定义两个指针变量p和q,初始时均指向头节点的下一个节点(链表的第一个节点),p指针沿链表移动;
当p指针移动到第k个节点时,q指针开始与p指针同步移动,
当p指针移动到最后一个节点时,q指针所指节点就是倒数第k个节点。 思路2:利用栈实现,遍历链表依次入栈,然后出k次栈就找到那个节点了。
1.定义栈结构
typedef struct{
int length;
int value[]; }Stack; void push(Stack &s,int v){
if(s.length <= 50){
s.value[s.length] = v;
s.length++;
printf("push: v=%d length=%d \n",v,s.length);
}else{
printf("exception: out of memory!");
return;
}
}
void pop(Stack &s,int &v){
if(s.length > 0){
v = s.value[--s.length];
printf("pop: v=%d length=%d\n",v,s.length);
}else{
printf("exception: out of memory!");
return;
}
}
void init_Stack(Stack *s){
s->length = ;
}
2.定义单链表结构
typedef struct LNode{ int data;
struct LNode *next;
}LNode,*LinkList; void init(LinkList &L){
int i;
int d;
LinkList p,r;
L = (LinkList)malloc(sizeof(LNode));
L->data = -;
L->next = NULL;
r = L;
scanf("%d",&d);
while(d != ){
p = (LinkList)malloc(sizeof(LNode));
p->data = d; //p->next = L->next;//头插法
//L->next = p;
r->next = p; //尾插法
r = p;
scanf("%d",&d);
}
r->next = NULL;//尾插法不要忘掉这个结束
} void print(LinkList L){
printf("\n");
L = L->next;
while(L!=NULL){
printf(" %d ",L->data);
L = L->next;
}
printf("\n"); }
3.实现方法
int find_munK(LinkList L, int k){
LinkList p ;
int i;
int result; Stack s;
init_Stack(&s); p = L->next;
while(p){
push(s,p->data);
p = p->next;
} for(i=;i<=k;i++){
pop(s,result); }
return result;
}
4.测试
int main(){
LinkList L1;
init(L1);
print(L1); printf("-->%d\n",find_munK(L1, )); //输出倒数第3个
return ;
}

tip:
在上面的方法中:
参数有的是普通类型:
int find_munK(LinkList L, int k)
这里的L是指针类型(因为LinkLinst是指针类型的),
k是普通类型的,进去再出来k不会被修改
有的是地址类型:
void init(LinkList &L) //这里接收的是一个地址
L是地址类型的,在方法内修改L后,出来L也被修改了
LinkList L1;//这里的LinkList是指针类型的
init(L1);
LinkNode L2;//这里的LinkNode是普通类型的
inti(*L2);
总的来说,就是传入一个地址
有的是指针类型:
void init_Stack(Stack *s)
s是指针类型的,在方法内修改后,出来s也被修改了
Stack s; //Stack就是普通类型的,和int无差,需要取地址传入指针类型的形参
init_Stack(&s);
void fun(int a,int &b,int &c,int *d,int *e){
a = ;
b = ;
c = ;
*d = ;
*e = ;
}
int main(){
int a = ;
int b = ;
int * c ;
int d = ;
int * e;
c = &d;
e = &b;
printf("a=%d b=%d c=%d d=%d e=%d \n ",a,b,*c,d,*e);
fun(a,b,*c,&d,e);
printf("a=%d b=%d c=%d d=%d e=%d \n ",a,b,*c,d,*e);
}

单链表输出倒数第k个结点值(栈实现)的更多相关文章
- 查找单链表中倒数第k个结点
本文转自:程序员面试题6--查找链表中倒数第k个结点 题目:输入一个单向链表,输出该链表中倒数第k个结点.链表的倒数第0个结点为链表的尾指针.链表结点定义如下: struct ListNode { i ...
- 删除单链表的倒数第k个结点
策略 直接遍历总数为len,再次遍历第len-k+1个就是答案,但是这样遍历了O(N+k)个,可以在O在更短的时间内找到 图示 参考代码 #include <iostream> using ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
- 输出单向链表中倒数第k个结点
描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* ...
- 输入一个单向链表,输出该链表中倒数第K个结点
输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...
- 算法:输入一个链表,输出该链表中倒数第k个结点。
算法:输入一个链表,输出该链表中倒数第k个结点.<剑指offer> 思路加到注释里面了: 1:两个if判断是否返回值为空,首个为空,没有第k个值: 2:for循环找到倒数第k个值,返回为a ...
- 【剑指offer】输入一个链表,输出该链表中倒数第k个结点。
一.题目: 输入一个链表,输出该链表中倒数第k个结点. 二.思路: 用两个指针p1和p2,p2先跑k步,然后p1和p2同时跑,p2跑到头p1所在的位置就是倒数第k个节点.很简单吧?简单你也想不到,想到 ...
- [华为]输出单向链表中倒数第k个结点
输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第1个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_ ...
- 剑指offer14:输入一个链表,输出该链表中倒数第k个结点。
1. 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2. 思路和方法 可以用两个指针,一个指针遍历到第k个结点的时候,第二个指针再走到第一个节点,然后两个指针的距离始终保持k-1.这样,当第一 ...
随机推荐
- F110操作手册-自动付款
SAP 系统 F110系统操作手册 目 录 1.自动付款... 3 1.自动付款 事务代号: F110 菜单路径: 会计 →财 ...
- CoreThink主题开发(八)使用H-ui开发博客主题之用户登录之前及登录之后
感谢H-ui.感谢CoreThink! 效果图: 登录之后 登录窗体 想做登录之后的下拉菜单的,实在做不出来了,就一般显示了... 整个面包屑导航这里,先遍历模块,并且是允许前台显示的模块,之后就是判 ...
- HackerRank - fibonacci-modified 【大数】
思路 用PYTHON 或 JAVA 干掉 AC代码 a, b, n = map(int, input().split()) for i in range (2, n, 1) : temp = b b ...
- C# 学习黑马.Net视频教程,大文件拷贝
设计器代码: namespace 大文件拷贝 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> ...
- layer满屏/禁止最大化最小化 可以做选择框使用
1.layer弹窗最大化 var index=layer.open(); layer.full(index); 2.layer禁止最大化最小化 layer.open( [ type:2, title: ...
- cookie的路径和域
1.Cookie的路径介绍 我们知道Cookie 的属性有很多,其中有一个属性是路径path.有些人认为Cookie 的路径指的是Cookie 在客户端的保存路径,其实并不是.Cookie 的路径是相 ...
- GPU的工作原理
转:https://blog.csdn.net/p23onzq/article/details/79609629 在GPU出现以前,显卡和CPU的关系有点像“主仆”,简单地说这时的显卡就是画笔,根据各 ...
- awk的逻辑运算符
运算符 描述 赋值运算符 = += -= *= /= %= ^= **= 赋值语句 逻辑运算符 || 逻辑或 && 逻辑与 正则运算符 ~ ~! 匹配正则表达式和不匹配正则表达式 关系 ...
- Python 条件判断语句(if ,elif, else)
条件判断可以分: 单分支判断:只有一个if语句 双分支判断:if else 的格式 多分支判断:if elif else 的格式 条件语句嵌套判断 # 下面是个条件多分支判断 score = 85 ...
- each方法的简单使用
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/stric ...