2009(408)数据结构有关链表代码题

2009(408)数据结构有关链表代码题_第1张图片

 

算法思想

第一种(普通算法):遍历链表,输出链表的长度,比较链表长度与k的关系,若长度小于k则失败,返回数值0。如果长度大于k,将指针移动到第倒数第k个位置,输出data的值,返回1即可。

typedef int Elemtype;//链表数据结构类型定义

typedef struct LNode{//链表结构体定义

Elemtype data;

struct LNode *link;

}LNode,*LinkList;

int sertcg(LinkList list ,int k){

LNode *p=list->link;//指针p指向第一个结点

int i=0,j=0;

while(p!=NULL){//遍历链表确定链表长度

        p=p->next;

        i++;

}

if(i

else{

        p=list->link;//指针重新开始遍历

        if(j

                j++;

                p=p->link;

}

printf(“%d”,p->data);//返回数据元素的值

return 1;//查找成功

}

第二种(优秀算法):定义两个指针变量p和q,初始时均指向头结点的下一个结点,p指针先移动,q指针不变,如果此时p移动到第k个位置时,p,q同步移动,当p移动到最后一个结点时q所指向的结点为倒数第k个结点。

typedef int Elemtype;//链表数据结构类型定义

typedef struct LNode{//链表结构体定义

Elemtype data;

struct LNode *link;

}LNode,*LinkList;

int serch_t(LinkList list){

LNode *p=list->link,*q=list->link;//p,q指针分别指向链表第一个结点

int count=0;

while(p!=NULL){//如果此时P不为空

        if(count

        else q=q->link;//p,q同步移动

        p=p->link;

}

if(count

else {

        printf(“%d”,q->data);//查找成功输出值,返回1。

        return 1;

}

}

你可能感兴趣的:(知识总结,笔记,链表,数据结构)