南航829数据结构单链表学习

本文详细介绍了单链表的概念、如何查找链表中倒数第k个结点的算法,以及单链表的基本操作,包括头插法、尾插法建立链表,按序号和值查找结点,以及插入结点的方法。文章通过实例和代码解析,加深了对单链表理解。

 

引例:带有表头结点的单链表,结点结构为数据域data,指针域next, 设该链表只给出头指针list。在不改变链表的前提下,设计一个算法查找链表中倒数第k个位置上的结点,查找成功则输出该结点的data域的值,并返回1;否则,只返回0.

答:

(1)算法思想:我们应该定义p,q两个指针变量,一开始的时候都指向链表的第一个结点,p指针沿着链表移动;当p指针移动到第k个位置的结点时,q指针再开始与p同步移动。当p移动到链表最后一个结点的时候,q指针所指向的结点就是倒数第k个结点。

(2)具体实现步骤:

第一步:先定义一个计步器count,令count=0,;同时,指针p和q均指向链表第一个结点;

第二步:如果p为空,则代表链表为空表,转到第五步;

第三步:当count=k时,q就指向下一个结点;否则(else),count=count+1;

第四步:p指向下一个结点,并转到第二步;

第五步:若count=k,则代表了查找成功;

(3)代码

typedef int ElemType;  //链表数据的类型定义
typedef struct LNode{  //链表数据的结构定义
  ElemType data;       //结点数据
  struct LNode *link;  //结点链接指针
}LNode , *LinkList;
int Search_k(LinkList list,int k){
  LNode *p=list->next;
  LNode *q=list->next;  //指针p,q指向第一个结点
  int count=0;//计步器
  while(p!=NULL){       //链表不为空表时,遍历链表直至最后一个结点
    if(count<k){        //计步,若count<k,则只移动p
    count++;
    }
    else{
    q=q->link;          //否则,就让q和p同步移动
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值