zoukankan      html  css  js  c++  java
  • 链表面试题

    1、逆置链表

    假设链表现在是 4->3->2->1->NULL
    逆置后的链表是 1->2->3->4->NULL
    步骤:
    第一步:先把4用临时指针tmp保存起来,cur指向下一个节点,即cur指向3

    第二步:令tmp指向newNode,4是第一个节点,则4的next为NULL,即令tmp->next =newNode(最开始newNode为NULL)

    第三步:令 newNode= tmp

    以此类推,当cur为NULL时,结束循环。

    最后更新头指针,将newNode赋给pHead。

    完整代码:

     1 void Reverse_list(pLinkList pList)
     2 {
     3     assert(pList);
     4     pLinkNode tmp = NULL;
     5     pLinkNode newNode = NULL; //记录链表翻转后的第一个节点
     6     pLinkNode cur = pList->phead;
     7     while (cur)
     8     {
     9         tmp = cur;
    10         cur = cur->next;
    11         tmp->next = newNode;
    12         newNode = tmp;
    13     }
    14     pList->phead = newNode; //更新头结点

    2.查找链表中间节点 (只允许遍历一次链表)

      快慢指针法:

      快指针每次走两步,慢指针每次走一步,等到快指针走到链表尾部时,慢指针刚好走到链表中间

     1 pLinkNode FindMidNode(pLinkList pList)//查找链表的中间节点
     2 {
     3     assert(pList);
     4     pLinkNode fast = pList->phead; //快指针,一次走两步
     5     pLinkNode slow = pList->phead;  //慢指针,一次走一步
     6     while(fast!=NULL)   
     7     {
     8         if (fast->next != NULL)
     9         {
    10             fast = fast->next->next;
    11         }
    12         else
    13         {
    14             break;
    15         slow = slow->next;
    16     }
    17     return slow;
    18 }

    3.删除链表倒数第k个节点,k大0,小于链表长度

        首先给个front指针和back指针,最开始都让他们指向头结点,先让front指针移动K次,然后让front指针和back指针同时移动,
    一直到front指针指向为NULL,此时back指针指向的就是倒数第K个节点,
    然后我们就可以删除back节点

     1 oid DelKNode(pLinkList pList, int k) //删除链表倒数第k个节点,k必须小于链表长度,k>0
     2 {
     3     assert(pList);
     4     pLinkNode del= NULL;
     5     
     6     if (k == 1)
     7     {
     8         PopBack(pList);
     9     }
    10     pLinkNode front= pList->phead;
    11     pLinkNode back = pList->phead;
    12     while (front != NULL&&k>0)
    13     {
    14         front = front->next;
    15         k--;
    16     }
    17     while (front != NULL)
    18     {
    19         front = front->next;
    20         back = back->next;
    21     }
    22     
    23         DataType  tmp = back->data;
    24         back->data = back->next->data;
    25         back->next->data = tmp;
    26         del = back->next;
    27         back->next = back->next->next;    
    28         free(del);
    29     
    30 
    31 
    32 }
  • 相关阅读:
    自定义TAB
    android Tabhost部件
    PHP链接MYSQL
    Server.Transfer传值方法的使用
    JQuery一些简单常用的方法
    经典mssql语句大全
    C#中如何将DataTable中的数据写入Excel
    03、JavaEECookie & Session
    08、C# Task的使用
    06、JavaEEJSP基本语法
  • 原文地址:https://www.cnblogs.com/xmc2017/p/6306046.html
Copyright © 2011-2022 走看看