当前位置:   article > 正文

链表笔试面试题(一)_c# 链表面试题

c# 链表面试题


本博客内容

1、单链表的结构
2、求链表的长度
3、单链表反转
4、单链表倒数第k个节点
5、查找链表的中间节点
6、从尾到头打印链表
7、已知2个单链表有序,把它们合并为一个有序链表
8、判断一个单链表是否有环
9、判断2个链表是否相交
10、求2个单链表相交的第1个节点

1、单链表的结构

struct ListNode
{
    int m_nValue;
    ListNode * m_pNext;
};
  • 1
  • 2
  • 3
  • 4
  • 5

2、求链表的长度

unsigned int GetListLength(ListNode * pHead)</font>
{
    if(pHead==NULL)
        return 0;
    ListNode * pNode=pHead;
    unsigned int length=0;
    while(pNode)
    {
    length++;
    pNode=pNode->m_pNext;
    }
    return length;
}   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3、单链表反转

① 采用交换的方法

ListNode * ReverseList(ListNode * pHead)
{
    if(!pHead||!pHead->m_pNext)
        return pHead;
    ListNode * pReverseHead=NULL;
    ListNode * pNode=pHead;
    ListNode * pPrev=NULL;
    while(pNode)
    {
        ListNode * pNext=pNode->m_pNext;
        if(!pNext)
            pReverseHead=pNode;
        pNode->m_pNext=pPrev;
        pPrev=pNode;
        pNode=pNext;
    }
    return pReverseHead;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

②递归方法

ListNode * ReverseList(ListNode * pHead)
{
    if(!pHead||!pHead->m_pNext)
        return pHead;
    ListNode * result=ReverseList(pHead->m_pNext);
    pHead->m_pNext->m_pNext=pHead;
    pHead->m_pNext=NULL;
    return result;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

③使用辅助栈空间

ListNode * ReverseList(ListNode * pHead)
{
    if(!pHead||!pHead->m_pNext)
        return pHead;
    stack<ListNode * > stk;
    ListNode * pNode=pHead;
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/478378
推荐阅读
相关标签
  

闽ICP备14008679号