單鏈表就地轉置

2021-10-14 15:12:52 字數 1086 閱讀 2797

試寫一道演算法,實現單鏈表的就地逆置(反轉),即利用原表的儲存空間將線性表(a1,a2,⋯an)逆置(反轉)為(an⋯ ,a2,a1​)。

輸入格式

輸入共有兩行,第一行為線性表長度 n(0≤n≤26)。

第二行共有 n 個大寫字母,為順序輸入的線性表的元素,每兩個大寫字母之間乙個空格。

輸出格式

輸出只有一行,為逆置後的線性表元素的順序輸出。每兩個大寫字母之間乙個空格,最後乙個大寫字母後面沒有空格。

#include typedef struct nodenode,*linkedlist;

linkedlist insert(linkedlist head, node *node, int index)

head = node;

return head;

}if (index == 0)

node *current_node = head;

int count = 0;

while(current_node->next != null && count < index - 1)

if (count == index - 1)

return head;

}void out_put(linkedlist head)

node *current_node = head;

while(current_node != null && current_node->data != 'p')

printf("\n");

}linkedlist reverse(linkedlist head)

node *current_node = head->next;

head->next = null;

node *next_node;

while(current_node != null)

return head;

}void main()

linkedlist = reverse(linkedlist);

out_put(linkedlist);

return 0;

}

單鏈表就地逆置

思路為定義四個工作指標p back p q back q,然後先將p q從鍊錶中摘下,在分別在p back後和q back後插入。最後在重新定位工作指標。注意點 若先全部摘下,否則在中點相遇時p和q back會重疊,使得鍊錶斷開,所以當長度為偶數時到達中點的兩個節點時要跳出迴圈,另外直接交換兩者 迴...

單鏈表就地逆置

就地逆置鍊錶 分析 我們採用頭插法或者相鄰節點直接修改指向的方法來進行逆置。如下 struct link define crt secure no warnings include include void reverse link h h next pre 頭指標指向最後乙個節點 q next n...

單鏈表的就地逆置

單鏈表的就地逆置是指輔助空間o 1 的逆置方法,有兩種方法 普通迴圈 頭插法重新建立帶頭節點的新鍊錶 和遞迴。下面我們詳細介紹這兩種方法 方法一 頭插法 演算法思想 逆置鍊錶初始為空,表中節點從原煉表中依次 刪除 再逐個插入逆置鍊錶的表頭 即 頭插 到逆置鍊錶中 使它成為逆置鍊錶的 新 的第乙個結點...