c 版資料結構 單鏈表複習之常見面試題型1

2021-07-10 09:59:44 字數 2768 閱讀 7748

題目描述:

1:從尾到頭依次列印單鏈表

2:在鍊錶中刪除指定的節點

3:假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的

乙個節點(不是第乙個,也不是最後乙個節點),請將該節點從單鏈表中刪除。 4:

假設有乙個沒有頭指標的單鏈表,乙個指標指向此單鏈表中乙個節點,要求在

此節點前插入乙個節點

5:編寫乙個函式,給定乙個鍊錶的頭指標,要求只遍歷一次,將單鏈表中的元素順序反轉過來

解題思路及其**如下:(單鏈表採用模板類,無頭節點)

list.h

#ifndef _list_h_

#define _list_h_

#include#include#include#includeusing namespace std;

templateclass list;

templateclass listnode

private:

t _val;

listnode*_next;

};templateclass list

bool push_back(const t&val)

if (head == null)

else

tmp->_next = new_node;

} return true;

} bool push_front(const t&val)

else

return true;

} bool pop_back()

if (head->_next == null)

else

delete tmp->_next;

tmp->_next = null;

} return true;

} bool pop_front()

else

} ~list()

} void print()const

cout <<"null"<< endl; }

//《從尾到頭依次列印單鏈表》

//1:棧 2:遞迴

//如果鍊錶元素很多,遞迴的方式會導致棧溢位,所以第一種方式魯棒性更好

void print_from_tail_by_stack()const

while (!st.empty())

cout << "null" << endl;

} void print_form_tail_by_recursion()

//在鍊錶中刪除指定的節點

bool delete_node(const t &val)

else

if (prev->_next == null)

else

} return true;

} //問題描述:假設有乙個沒有頭指標的單鏈表。乙個指標指向此單鏈表中間的

//乙個節點(不是第乙個,也不是最後乙個節點),請將該節點從單鏈表中刪除。

//解題思路:將該節點的後面乙個節點的內容,拷貝到該節點,然後將後乙個節點刪除

void delete_mid_node(listnode*cur)

//編寫乙個函式,給定乙個鍊錶的頭指標,要求只遍歷一次,將單鏈表中的元素順序反轉過來。

//指向第二個節點,然後將第二個節點以及之後的節點頭插

void reverse1()

listnode*tmp = head->_next;

head->_next = null;

while (tmp != null)

} void reverse2()

listnode*prev = head;

listnode*cur = prev->_next;

listnode*next = null;

head->_next = null;

while (cur != null)

} //問題描述:假設有乙個沒有頭指標的單鏈表,乙個指標指向此單鏈表中乙個節點,要求在

//此節點前插入乙個節點

//思路:在該節點之後插入該節點,然後交換二者的資料

void insert(listnode*cur,int val)

private:

listnode*buy_node(const t val = 0, listnode*next = null)

bool is_empty()const

void _print_form_tail_by_recursion(listnode*head)

else

} listnode*head;

};#endif

main.cpp

#include"list.h"

void test1()

list.print();

//for (int i = 0; i < 5; ++i)

void test2()

list.print();

list.delete_node(0);

list.print();

list.delete_node(3);

list.print();

list.delete_node(9);

list.print();

}//reverse

void test3()

list.print();

list.reverse2();

list.print();

}int main()

資料結構之單鏈表 C 版

include include using namespace std typedef string elemtype typedef struct lnodelnode,slink void initlist slink l void locateelem slink l void listins...

資料結構 單鏈表(C 版)

模擬鍊錶 用兩個陣列模擬動態鍊錶,因為c 中動態記憶體申請太慢,所以用靜態的陣列模擬動態鍊錶,提高演算法效率。基本思路 與動態鍊錶的操作原理和步驟大致相同,只不過是用陣列代替節點,用變數代替指標 模板 head儲存煉表頭,e儲存節點的值 即資料域 ne儲存節點的next指標 即指標域 idx表示當前...

資料結構之單鏈表常見面試題(一)

逆序列印單鏈表這裡用的是遞迴的列印方法。void linklistreverse linknode head if head next null linklistreverse head next printf c p n head data,head 這裡進行對指標的改變指向,再進行覆蓋內容即可。...