【数据结构】单链表循环左移K位

例如链表数据有:1 2 3 4 5 6 7 8 910

左移2位 结果为 3 4 5 6 7 8 9 10 1 2

需要处理边界情况 :左移11位 显示错误 ,左移0位 显示错误 ,左移10位 显示错误。

void leftshift(LinkList List, int num)
{
	int cnt = 0;//表示当前的位置
	LinkList now = List;//用于遍历链表
	LinkList p = NULL;//第num个节点的地址

	while (now->next != NULL)
	{
		now = now->next;
		cnt++;
		if (cnt == num)//找到了第num个节点的地址
		{
			p = now;
		}
	}

	//说明找到了第num个节点的地址,并且这个节点不位于链表的最末端
	if (p != NULL&&p->next != NULL)
	{
		LinkList StartNode = List->next;//开始节点
		List->next = p->next;//头节点连接到第num+1个节点
		p->next = NULL;//要移动的链表断开与原链表的连接
		now->next = StartNode;//把开始节点到NUM的数据插入尾
	}
	else
	{
		cout << "erro!!!" << endl;
	}

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值