鍊錶的各種操作

2021-09-10 04:56:29 字數 1694 閱讀 1519

鍊錶的基本操作都寫在下面了

具體內容寫在**注釋中了

#include #include #include #include using namespace std;

struct listnode

;///增,傳進來要增加尾的鍊錶的表頭

///可利用這個函式來建立鍊錶

void create(listnode** head, int val)

else

phead->next = new_node;

}return ;

}///刪,刪掉鍊錶中第乙個值為val的節點

void delete_node(listnode** head, int val)

else

if(phead->next!=nullptr&&phead->next->val==val)

}return ;

}///注意**的魯棒性,異常處理啊!!!!記住了呀

///倒數第k個節點,相當於只遍歷一遍鍊錶

listnode * find_kth_tail(listnode * head, int k)

while(quick->next!=nullptr)

return slow;

}///倒著列印鍊錶,利用棧的特性,不建議用遞迴寫,容易爆棧

void reverse_listnode_print(listnode * head)

while(!s.empty())

}///利用快慢指標判斷鍊錶是否存在環

///原理:慢指標每次走一步,快指標每次走兩步

///初始狀態都處於煉表頭,同時出發,如果快指標走到表尾

///兩個指標還沒有相遇則證明沒有環存在,如果相遇則存在環

///可模擬於環形跑道

listnode * check_ring(listnode * head)

return nullptr;

}///計算環的長度

int len_of_ring(listnode* start)

return len;

}///尋找鍊錶入口

listnode* enter_of_ring(listnode* head)

return slow;

}///反轉整個鍊錶,返回值為反轉後的表頭

listnode* reverse_list(listnode* head)

return pre;

}///反轉相鄰元素,返回值為反轉後的表頭

listnode* reverse_adjacent_element(listnode* head)

return ans;

}///合併兩個有序鍊錶,返回值為合併後的煉表頭

listnode* merge_list(listnode* head1, listnode* head2)

else

}while(head1!=nullptr)

while(head2!=nullptr)

ans = nullptr;

return res->next;

}int main()

printf("---------\n");

head = merge_list(head,head2);

while(head!=nullptr)

}return 0;

}

鍊錶的各種操作

鍊錶的各種操作 typedef struct lnode lnode linklist 建立乙個鏈式表 向表中加入資料 status listset linklist head p2 next null return ok 返回鏈式表的長度 int listlength linklist head ...

鍊錶的各種操作

include include typedef struct node node typedef struct lists void add lists list,int num 建立新鍊錶 void print lists list 輸出鍊錶 void frees lists list 清除鍊錶 ...

鍊錶的各種基本操作

class linklist class node public node 在煉表頭新增節點 param value public void addfirst int value 在鏈尾新增節點 param value public void addlast int value 指定位置新增節點 p...