#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.適用於需要進行大量增添 刪除元素操作而對訪問元素...