單鏈表原地逆置

2021-09-24 21:14:39 字數 1213 閱讀 7153

題目

是編寫演算法將帶一單鏈表逆置,要求空間複雜度為o(1

)o(1)

o(1)。分析

單鏈表分為帶頭節點和不帶頭節點兩種,逆置思路有兩種,第一種是採用頭插法重新建立新的單鏈表,該方法直接遍歷鍊錶,每次將當前結點新增到新鍊錶的頭部;第二種是通過該錶*next指標,定義三個指標*pre, *p, *r,分別表示三個連續結點,將p->next指向pre,但同時p的後繼節點會斷開,所以需要用r儲存其後繼節點。

**下面分別展示帶頭節點的單鏈表和不帶頭節點的單鏈表,採用上述兩種思路實現單鏈表逆置:

1. 帶頭結點單鏈表⟶

\longrightarrow

⟶頭插法

void

reverse_1

(lnode &l)

}

2. 帶頭結點單鏈表⟶

\longrightarrow

⟶修改*next指標

void

reverse_2

(lnode &l)

pre = p;

p = r;

r = r-

>next;

p->next = pre;

} l.next = p;

}

3. 不帶頭結點單鏈表⟶

\longrightarrow

⟶頭插法

lnode*

reverse_1

(lnode *l)

return p;

}

4. 不帶頭結點單鏈表⟶

\longrightarrow

⟶修改*next指標

lnode*

reverse_2

(lnode *l)

pre = p;

p = r;

r = r-

>next;

p->next = pre;

}return p;

}

總結

上述幾種方法的時間複雜度均為o(n

)o(n)

o(n)

,空間複雜度為o(1

)o(1)

o(1)

單鏈表原地逆置

1.有頭結點的單鏈表原地逆置 尾插法 bool reverse1 listnode l 翻轉後l為頭結點 return true 2.無頭結點的單鏈表原地逆置 外加乙個頭結點 bool reverse2 listnode l 最後l為尾結點 return true 3.翻轉鍊錶中第m個節點到第n個節...

單鏈表原地逆置

給定乙個帶頭結點的單鏈表,編寫演算法將其原地逆置。所謂 原地 是指空間複雜度為o 1 有兩種方法,頭插法和冒泡法。這兩種方法的時間複雜度均為o n 我們知道,用頭插法建立鍊錶,得到的鍊錶中元素的順序和輸入的順序相反,所以利用這一特點,可以將鍊錶逆置。給定乙個帶頭結點的單鏈表l,如下圖所示。首先用指標...

單鏈表逆置

單鏈表逆置 include include define item num 10 typedef struct tagnode node node linklist create void linklist destroy node head void linklist print node hea...