用C 語言實現鏈表面試題

2021-08-11 00:21:44 字數 2895 閱讀 5593

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

typedef int datatype;

typedef struct node

node,*pnode,*plist;

void init(plist* head)

void pushback(plist* head,datatype x)//尾插

else

cur->next = p; }}

//逆序列印鍊錶

void printfromtail1(pnode head)

}//遞迴轉迴圈

void printfromtail2(pnode head)

while (!s.empty())

cout << endl;

}void print(pnode head)//正序列印

cout << endl;

}size_t size(pnode head)

return count;

}pnode find(pnode head,size_t pos)

} return cur;

}//刪除無頭單鏈表的非尾結點

void deltenotail(pnode head, int pos)

//在無頭單鏈表的乙個非頭結點前插入乙個結點

void insertnohead(pnode head, int pos,datatype data)

pnode back(pnode head)//找到最後乙個元素

return cur;

}//單鏈表實現約瑟夫環

pnode josephcircle(pnode head, int m)

cout << cur->data<<" ";

//替換刪除

pnode del = cur->next;

cur->data = del->data;

cur->next = del->next;

delete del;

} cout << endl;

cur->next = null;

head = cur;

return cur;

}//逆置/反轉單鏈表

//1.三個指標

pnode reverse(pnode& head)

pcur->next = ppre;

head = pcur;

}//頭插逆置

pnode reverlist(pnode& head)

return newhead;

}//單鏈表排序

void bubblesort(pnode head)

pcur = pnext;

pnext = pnext->next;

} ptail = pcur;

if (!ischange)//沒有交換

return; }}

//合併兩個有序鍊錶,合併後仍有序

pnode merge2list(pnode phead1, pnode phead2)

else

//比較,每次比較小的尾插在新鍊錶中

while (l1&&l2)

else

ptail = ptail->next;

} //乙個鍊錶走到尾,另乙個鍊錶直接連線在新鍊錶的尾部

if (l1)

ptail->next = l1;

if (l2)

ptail->next = l2;

return pnewnode;

}//查詢中間結點

pnode midnode(pnode head)

//return slow;//偶數返回中間的後乙個

while (fast->next&&fast->next->next)

return slow;

}//刪除倒數第k個結點

void delreknode(pnode head, size_t k)

while (fast->next)

cur = slow;//cur指向要刪除結點的前乙個結點

del = cur->next;

cur->next = del->next;

delete del;}/*

//判斷鍊錶是否帶環

bool iscricle(pnode head)}*/

//判斷是否帶環,返回兩個指標相遇位置

pnode iscricle(pnode head)

return null;

}//求環的長度

size_t lenofcriclelist(pnode head)

return count;

}//求環入口位址

pnode extofcircle(pnode head)

return cur;

}size_t lennocircle(pnode head)

return len;

}//判斷兩鍊錶是否相交,若相交,求交點

pnode checkcross(pnode head1, pnode head2)

} if (len1>len2)

}//兩個指標一起走

while ((null != cur1) && (null != cur2))

}//兩個鍊錶均帶環

else if (iscricle(head1) && iscricle(head2))

}while (len1>len2)

}while (null != cur1&&null != cur2)

}else

}//其他情況

return null;

}int main()

c語言實現單鏈表面試題

首先實現乙個無頭單鏈表 include include include typedef int datatype typedef struct listnode listnode 列印 void printlist listnode plist printf null printf n 尾插 voi...

C語言實現單鏈表面試題 高階

判斷單鏈表是否帶環?若帶環,求環的入口點 listnode judge band listnode plist 判斷單鏈表是否帶環?若帶環,求環的入口點?if fast next null fast next next null return null fast plist while fast s...

C語言實現單鏈表面試題(基礎篇)

順序表 1.記憶體中位址連續 2.長度不可變更 3.支援隨機查詢 可以在o 1 內查詢元素 4.適用於需要大量訪問元素的 而少量增添 刪除元素的程式 鍊錶 1.記憶體中位址非連續 2.長度可以實時變化 3.不支援隨機查詢 查詢元素時間複雜度o n 4.適用於需要進行大量增添 刪除元素操作而對訪問元素...