6-1 帶頭結點的單鏈表就地逆置(10 分)
本題要求編寫函式實現帶頭結點的單鏈線性表的就地逆置操作函式。l是乙個帶頭結點的單鏈表,函式listreverse_l(linklist &l)要求在不新開闢節點的前提下將單鏈表中的元素進行逆置,如原單鏈表元素依次為1,2,3,4,則逆置後為4,3,2,1。
void listreverse_l(linklist &l);
其中l
是乙個帶頭結點的單鏈表。
//庫函式標頭檔案包含
#include
#include
#include
//函式狀態碼定義
#define true 1
#define false 0
#define ok 1
#define error 0
#define infeasible -1
#define overflow -2
typedef int status;
typedef int elemtype; //假設線性表中的元素均為整型
typedef struct lnode
lnode,*linklist;
status listcreate_l(linklist &l,int n)
return ok;
}
void listreverse_l(linklist &l);
void listprint_l(linklist &l)
}
int main()
listreverse_l(l);
listprint_l(l);
return 0;
}
/* 請在這裡填寫答案 */
輸入格式:
第一行輸入乙個整數n,表示單鏈表中元素個數,接下來一行共n個整數,中間用空格隔開。
輸出格式:
輸出逆置後順序表的各個元素,兩個元素之間用空格隔開,最後乙個元素後面沒有空格。
4
1 2 3 4
4 3 2 1
void listreverse_l(linklist &l)
lnode *p=l->next,*q;
l->next=null;
while(p!=null)
q=p->next;
p->next=l->next;
l->next=p;
p=q;
/*思路:①將原來的頭結點拆下來,作為新的逆置鍊錶的頭結點
②將原來鍊錶的各個節點,依次拆卸下來,然後按照頭插法,插入到逆置鍊錶當中
③迴圈,直到原來的鍊錶為空即可。*/
資料結構 單鏈表的就地逆置
剛完成了嚴蔚敏的資料結構 單鏈表的就地逆置習題 2.21 解題時想到2種方案,特此總結一下 方案1 1遍歷單鏈表,並算出單鏈表的長度n。2定位到節點ai,與節點an i 1 i 1 to n 2 1 也就是單鏈表的一半長度 交換各自的資料 i 方案2 1定位尾節點 2依次將節點插入到尾節點之後 3將...
單鏈表就地逆置
思路為定義四個工作指標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...