編程時,涉及到數組的旋轉(以數組中心點爲對稱點進行亮亮交換),根據一般的做法是下面這樣:
for (int i = 0; i < n/2; ++i)
{
a[i] = a[n-1-i];
}
但有時候碰到邏輯複雜的時候,這個就很容易把for循環的第二個條件寫錯,還有個問題就是需要考慮n是奇數還是偶數,這時候就很難分清楚i的上限到底是n/2還是(n-1)/2。(我就經常犯這種錯誤)。如果下標不對,就會造成越界訪問或者交換結果不正確,下面提供一種根本不用考慮下標或者n的奇偶性的交換方法。
for (int i = 0, j = n-1; i != j; ++i, --j)
{
a[i] = a[j];
}
或者:
for (int i = 0, j = n-1; i < j; ++i, --j)
{
a[i] = a[j];
}
這種雙指針的操作應用很廣泛,包括在判斷鏈表中是否有環的題目中也會用到,區別就是初始值的不同。