單鏈表 鍊錶倒置

2021-07-14 17:28:34 字數 1749 閱讀 3986

鍊錶屬於動態資料結構,可以模擬成一「環」接一「環」的鏈條,這裡每一「環」視作乙個結點,結點串在一起形成鍊錶。這種資料結構非常靈活,結點數目無須事先指定,可以臨時生成。每個結點有自己的儲存空間,結點間的儲存空間也無需連線,結點之間的串連由指標來完成,指標的操作又極為靈活方便,無須移動大批資料,只需修改指標的指向。這是在程式設計中十分重要的一種資料型別。

我們把每乙個結點只有乙個指標域的鍊錶稱為單鏈表。單鏈表的每個結點的位址存放在其直接前驅結點的指標域中,第乙個結點沒有直接前驅結點,因此需要乙個頭指標指向第乙個結點。由於鍊錶中的最後乙個元素沒有直接後繼元素,需要將單鏈表的最後乙個結點的指標域置為「空」。

訪問鍊錶必須從頭指標開始,頭指標指向鍊錶的第乙個結點,通過頭指標可以找到鍊錶中的每乙個元素。

為了操作方便,有時我們會在單鏈表的第乙個結點之前增加乙個結點,稱為頭結點。頭結點的資料域可以存放入線性表的長度等資訊,頭結點的指標域存放第乙個元素結點的位址資訊,使其指向第乙個元素結點。

#include

using namespace std;

struct list

;//在下一行建立頭指標

list

*head;

list

*create()

else

q=p;

}if(head!=

null)

return head;

}void deletenode(list

*&head)

q=p->next;

while(q!=

null)

if(q->num>num)

p=q;

q=q->next;

}return ;

}void displaylist(list

*head)

}int main()

單鏈表逆置

演算法的核心就是reverse函式,其它的都是輔助建立鍊錶和輸出鍊錶的。

從資料結構的定義來看這是乙個帶頭節點的鍊錶。要弄的十分明白你要耐心點畫圖看看。我簡單的說下思路:

【head是指向頭結點的】

p=head; //p最開始指向頭結點

s=p->next; //s最開始指向第乙個節點

while(s->next!=null)//只要沒有到最後乙個元素就繼續。最後乙個元素的next肯定為null

s->next=p; //當最後乙個的時候,還是要指向她的前乙個。

head->next->next=null;//頭指標的下乙個是指向原來的第乙個。逆向後肯定是最後的那個了。所以最後的乙個的next=null就明了了。

head->next=s;//s是逆序前的最後乙個,逆序後是第乙個,所以用頭指向他

#include

using namespace std;

struct list

;list

*head;

void reverse(int begin, int end, list

*&head)

}list

*create()

else

q = p;

}if ( head !=

null )

return head;

}void displaylist(list

*head)

}cout << endl;

}int main()

單鏈表倒置

單鏈表倒置,想要倒置應先整理一下倒置的思路,應先知道鍊錶分為幾種 typedef struct node linklist 2.雙向鍊錶 在雙向鍊錶中它的每個資料結點中都有兩個指標 分別指向直接後繼和直接前驅,資料域儲存資料。結構如下 typedef struct doublenode double...

單鏈表倒置

單鏈表倒置可以說是面試中提問率最高的題目了。網上有很多單鏈表倒置的演算法,但是實現解釋的不是很清晰。總結了一些演算法之後,把我自己認為好理解的簡單方便的演算法整理下來,方便以後自己複習。1.迭代 下面的 及注釋應該很好的解釋了頭插法來實現單鏈表倒置的思路。1 node reverse node no...

單鏈表的倒置

今天晚上作老師布置的作業,一道是單鏈表的倒置,可把我搞慘了.這裡也把我可悲的經歷與大家說一下,提個醒免得以後犯和我一樣的很傻的錯誤 老師在ppt寫好了函式介面,於是我就直接把它拷貝到vs 2005 express 中編寫,寫好了,ctrl 7 進行編譯,error c4335 檢測到 mac 檔案格...