int* spiralOrder(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){ *returnSize = matrixSize*(*matrixColSize); int* arr = (int*)calloc(*returnSize, sizeof(int)); int up = 0, down = matrixSize - 1, left = 0, right = (*matrixColSize) - 1, pst = 0, i; while (pst < *returnSize){ for (i = left; i <= right && up<=down && left<=right; i++) arr[pst++] = matrix[up][i]; up++; for (i = up; i <= down && up <= down && left <= right; i++) arr[pst++] = matrix[i][right]; right--; for (i = right; i >= left && up <= down && left <= right; i--) arr[pst++] = matrix[down][i]; down--; for (i = down; i >= up && up <= down && left <= right; i--) arr[pst++] = matrix[i][left]; left++; } return arr; }