c语言链表程序题库,列举C语言链表面试题及答案

C语言对于一些学习者来说,或都会觉得很难,想从事C语言工程师的面试恐怕是最能过的一关,C语言经常会涉及到一些面试难点,这里,我们就从一些常见的经典C语言面试入手,IT培训网汇总并解析一些C语言面试题,如替换法,快慢指针等等,希望对C语言求职面试有所帮助。

77b7988b8cfab513e8c534a6e5889704.png

C语言链表面试题及答案解析

面试题一:从尾到头打印单链表。

void SLitsPrintTailToHead(SListNode* pHead)//非递归算法(利用俩个指针一个定义到尾部p1,另一个定义到头开始循环p2,每当p2循环到尾部时,输出p2的值,让尾部p1指向p2.再次开始循环,以此往复。)

{

SListNode *cur=NULL;

while (cur!=pHead)

{

SListNode *tail=pHead;

while(tail->next!=cur)

{

tail=tail->next;

}

printf("%d ",tail->data);

cur=tail;

}

}

void SListPrintTailToHeadR(SListNode* pHead)//递归算法

{

if (pHead==NULL)

{

return;

}

SListPrintTailToHeadR(pHead->next);

printf("%d ",pHead->data);

}

面试题二:删除一个无头单链表的非尾节点(不能遍历链表)

void SListDelNonTailNode(SListNode* pos)//应用了向前替换法,把后一个的值赋值给pos替换原值,然后把pos指向pos下一个的下一个。

{

SListNode *cur=NULL;

cur=pos->next;

pos->data=cur->data;

pos->next=cur->next;

free(cur);

}

面试题三:在无头单链表的一个节点前插入一个节点(不能遍历链表)

void SListInsertFrontNode(SListNode* pos, DataType x)

{

SListNode *cur=BuySListNode(pos->data);

cur->next=pos->next;

pos->data=x;

pos->next=cur;

}

面试题四:单链表实现约瑟夫环(JosephCircle)

/ 4.单链表实现约瑟夫环(JosephCircle) 约瑟夫环就比如说一群人围成一个圈,从一个人开始报数,如报到3的人就退出,下一个继续从1开始,直到只剩一个人时结束。

SListNode* SListJosephCircle(SListNode* pHead, int k)//phead是一个循环链表

{

SListNode *cur=pHead;

SListNode *nx=NULL;

while(cur->next!=cur)

{

int Coun=k;

while (--Coun)

{

cur=cur->next;

}

nx=cur->next;//利用替换法不需要遍历链表进行删除节点

cur->data=nx->data;

cur->next=nx->next;

free(nx);

}

return cur;

}

面试题五:逆置/反转单链表

SListNode* SListReverse(SListNode* list)//逆置/反转单链表 (重要多看看)

{

SListNode *cur=list;

SListNode *newlist=NULL;

SListNode *_next=NULL;

while (cur)

{

_next=cur->next;

cur->next=newlist;

newlist=cur;

cur=_next;

}

return newlist;

}

面试题六:单链表排序(冒泡排序&快速排序)

void SListBubbleSort(SListNode* list)//单链表排序(冒泡排序&快速排序) 冒泡排序俩俩比较。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值