本文提供pta重排鍊錶的兩種方法,兩種都是使用陣列模擬鍊錶的操作,區別在與所使用空間的大小不同,從而導致時間複雜度也不同。
重排鍊錶的第一種方法:
這種方法節省了很多空間,但在n非常大時會超時。
#include#include#includetypedef struct node* list;
struct node ;
int main()
} for (i = 1; i < n && l1[a[i - 1]].next != -1; i++)
} }if (i < n) n = i;
for (i = 0; i < n / 2; i++)
if (n % 2 == 1) printf("%05d %d %d\n", l1[a[n / 2]].adr, l1[a[n / 2]].data, -1);
return 0;
}
第二種方法:使用陣列模擬鍊錶操作,占用較大空間但時間複雜度小。
#include#include#includetypedef struct node list;
list l[100000];
list res[100000];
int main()
adr = fadr;
rnum = 0;
while (adr != -1)
for (i = 0; i < rnum / 2; i++)
if (n % 2 == 1) printf("%05d %d %d\n", res[rnum / 2].adr, res[rnum / 2].data, -1);
return 0;
}
PTA 重排鍊錶 陣列法)
給定乙個單鏈表 l1 l2 ln 1 ln,請編寫程式將鍊錶重新排列為 ln l1 ln 1 l2 例如 給定l為1 2 3 4 5 6,則輸出應該為6 1 5 2 4 3。每個輸入包含1個測試用例。每個測試用例第1行給出第1個結點的位址和結點總個數,即正整數n 105 結點的位址是5位非負整數,n...
leetcode 重排鍊錶
1.使用快慢指標,將鍊錶分成前後兩個部分 listnode fast head listnode slow head while fast null fast.next null listnode mid slow solw指向中間節點 listnode first head listnode se...
重排鍊錶(LeetCode)
題目鏈結 給定乙個單鏈表 l l0 l1 ln 1 ln 將其重新排列後變為 l0 ln l1 ln 1 l2 ln 2 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。示例 1 給定鍊錶 1 2 3 4,重新排列為 1 4 2 3.示例 2 給定鍊錶 1 2 3 4 5,重新排列為 ...