1. 程式人生 > >【資料結構】單鏈表迴圈左移K位

【資料結構】單鏈表迴圈左移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;
	}

}