題目描述:
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 這裡進行對指標的改變指向,再進行覆蓋內容即可。...