数据结构学习:有关带头结点的单向链表的常见考题(c语言)

1.将链表中pp结点之后的结点原地逆置(反转)。

解题思路:
通过设置两个指针ss\ssnext指针,其中一个ss指针指向pp结点的下一个节点,将pp指针后面的结点置空,留下链表中在pp结点前的元素,再利用设置的另一指针ssnext指针保存ss指针下一结点的信息,接着将ss指向的结点插入pp结点的后面,ss指针接着再指向指向下一结点,直到ss指针为空。

//1.将链表中pp结点之后的结点原地逆置(反转)。
void ReverseList(LNode *pp)
{
   
	LNode *ss,*ssnext;//设置两个指针ss\ssnext。 
	
	ss=pp->next;//ss指针指向pp结点的下一个节点。 
	pp->next=NULL;//将pp指针后面的结点置空,留下链表中在pp结点前的元素。 
	
	while(ss!=NULL)
	{
   
		ssnext=ss->next;//ssnext指针保存ss指针下一结点的信息。 
		
		//将ss指向的结点插入pp结点的后面。 
		ss->next=pp->next;
		pp->next=ss;
        
        ss=ssnext;//ss指针接着再指向下一结点。 
	} 
}

2.反向打印链表中全部的元素。

解题思路:
利用递归实现,当指针一直没有指向表尾时,便一直调用自身函数,直到指针为空返回,便从链表结尾从后往前执行输出语句。 时间复杂度为O(n)。

//2.反向打印链表中全部的元素。
void PrintList1(LNode *pp)
{
   
	if(pp == NULL) return;//判断指针是否为空。 
	
	PrintList1(pp->next);//调用自身函数。 
	
	printf("%3d",pp->data);//输出语句。 
}

3.找出带头结点的单链表倒数第k(k>0)个结点。

解题思路
可以设置两个指针,一个先出发设为fast指针,一个后出发设为slow指针,先让fast指针从表头移动到正数第k个结点,再设置另slow指针保持与先出发的指针一样的速度,向后移动,直到fast指针移动到表尾,这时slow移动的位置就是表长减去k的位置,也就是倒数第k个位置。

//3.找出带头结点的单链表倒数第k(k>0)个结点。
LNode *FindKNode(LinkList LL,unsigned int kk)
{
   
	LNode *fast=LL;//设置一个先出发的fast指针。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幺九久99

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值