![](https://static.youtibao.com/asksite/comm/h5/images/m_q_title.png)
面试题:在O(1)时间删除链表结点题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时
面试题:在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除链表结点。链表结点与函数的定义如下:
struct List Node
{
int m_n Value;
ListNode* m_pNext;
};
void DeleteNode (listNode** plistHead, ListNode* pToBeDeleted);
![](https://static.youtibao.com/asksite/comm/h5/images/solist_ts.png)
面试题:在O(1)时间删除链表结点
题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除链表结点。链表结点与函数的定义如下:
struct List Node
{
int m_n Value;
ListNode* m_pNext;
};
void DeleteNode (listNode** plistHead, ListNode* pToBeDeleted);
面试题:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2,则合并之后的升序链表3所示。链表结点定义如下:
struct list Node
{
int m _n Value;
listNode* m_pNext;
};
面试题:链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个结点是值为4的结点。
链表结点定义如下:
struct List Node
{
int m n Value;
ListNode* m_p Next;
};
面试题:两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
面试题:反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
struct List Node
{
int m_n Key;
ListNode+ m_p Next;
};
面试题:复杂链表的复制
题目:请实现函数ComplexListNode*Clone(ComplexListNode*pHead),复制一个复杂链表中,每个结点除了有一个m_pSibing指向链表中的任意结点或者NULL。结点的C++定义如下:
struct ComplexListNode
{
Int m_nValue;
ComplexListNode* m_pNext;
ComplexListNode* m_pSibling;
};
面试题:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值。
链表结点定义如下:
struct List Node
{
int m_n Key;
ListNode* m_pNext;
};
面试题:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
面试题:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTaik和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
template <typename T>class CQueue
{
public:
coueue (void);
~CQueue (void)j
void appendTail (constT&node);
T deleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};