zoukankan      html  css  js  c++  java
  • 学习笔记之程序员面试攻略(第2版)

    程序员面试攻略_百度百科

    http://baike.baidu.com/link?url=egiDevITF7mxrqaIMf804VbBrCWIwaBsL5QgGZPgb_TfdhRuBZaYXcnLoL-sD7AjX-US4vhW0Zc7eZjWNAYOx_

    第4章  链表

    • 更新头指针。
    • bool insertInFront1(ListNode *pInHead, int inVal)只是对*pInHead进行值传递,然后在函数内更新了头指针的“本地拷贝”。
    • 要更新指针可以有两种方式:bool insertInFront2(ListNode **pInHead, int inVal)就是传入了头指针的指针,ListNode *insertInFront3(ListNode *pInHead, int inVal)则是直接返回新的头指针。
    • 注意只是传入头指针的话,直接传递pHead。如果是头指针的指针,则是&pHead。 
      1 #include <iostream>
      2 using namespace std;
      3 
      4 struct ListNode 
      5 {
      6        int val;
      7        ListNode *next;
      8        ListNode(int x = 0) : val(x), next(NULL) {}
      9 };
     10  
     11 class Solution 
     12 {
     13 public:
     14     void PrintList(ListNode *inListNode)
     15     {
     16          if (inListNode != NULL) {
     17             cout << inListNode->val << endl;
     18             PrintList(inListNode->next);
     19          } else
     20             cout << "NULL
    " << endl;
     21     }
     22 
     23     bool insertInFront1(ListNode *pInHead, int inVal)
     24     {
     25          cout << "Entry bool insertInFront1(ListNode *pInHead, int inVal)
    " << endl;
     26          
     27          if (pInHead == NULL) return false;
     28                   
     29          ListNode *pNewElem = new ListNode;
     30          pNewElem->val = inVal;
     31          pInHead = pNewElem; // Incorret!
     32 
     33          cout << "pNewElem = " << pNewElem << endl;
     34          cout << "PrintList(pNewElem)" << endl;
     35          PrintList(pNewElem);
     36 
     37          cout << "pInHead = " << pInHead << endl;
     38          cout << "PrintList(pInHead)" << endl;
     39          PrintList(pInHead);
     40 
     41          return true;
     42     }
     43 
     44     bool insertInFront2(ListNode **pInHead, int inVal)
     45     {
     46          cout << "Entry bool insertInFront2(ListNode **pInHead, int inVal)
    " << endl;
     47          
     48          if (pInHead == NULL) return false;
     49                   
     50          ListNode *pNewElem = new ListNode;
     51          pNewElem->val = inVal;
     52          *pInHead = pNewElem; // Correctly updates head
     53 
     54          cout << "pNewElem = " << pNewElem << endl;
     55          cout << "PrintList(pNewElem)" << endl;
     56          PrintList(pNewElem);
     57 
     58          cout << "pInHead = " << pInHead << endl;
     59          cout << "PrintList(pInHead)" << endl;
     60          PrintList(*pInHead);
     61 
     62          return true;
     63     }
     64 
     65     ListNode *insertInFront3(ListNode *pInHead, int inVal)
     66     {
     67          cout << "Entry ListNode *insertInFront3(ListNode *pInHead, int inVal)
    " << endl;
     68          
     69          if (pInHead == NULL) return false;
     70                   
     71          ListNode *pNewElem = new ListNode;
     72          pNewElem->val = inVal;
     73 
     74          cout << "pNewElem = " << pNewElem << endl;
     75          cout << "PrintList(pNewElem)" << endl;
     76          PrintList(pNewElem);
     77 
     78          cout << "pInHead = " << pInHead << endl;
     79          cout << "PrintList(pInHead)" << endl;
     80          PrintList(pInHead);
     81 
     82          return pNewElem;  // Correctly updates head
     83     }
     84 };
     85 
     86 int main ()
     87 {
     88     Solution testSolution;
     89     int value = 5;
     90  
     91     ListNode* pHead = new ListNode(1);
     92 
     93     cout << "Test bool insertInFront1(ListNode *pInHead, int inVal)
    " << endl;
     94     // Print Head node
     95     cout << "pHead = " << pHead << endl;
     96     if (pHead != NULL)
     97        cout << "pHead->val = " << pHead->val << endl;
     98     cout << endl;
     99 
    100     // Print Linkedlist
    101     cout << "PrintList(pHead)" << endl;
    102     testSolution.PrintList(pHead);        
    103     
    104     bool flag = testSolution.insertInFront1(pHead, value);
    105     cout << "testSolution.insertInFront1(pHead, value) = " << flag << "
    " << endl;
    106 
    107     // Print Head node
    108     cout << "pHead = " << pHead << endl;
    109     if (pHead != NULL)
    110        cout << "pHead->val = " << pHead->val << endl;
    111     cout << endl;
    112 
    113     // Print Linkedlist
    114     cout << "PrintList(pHead)" << endl;
    115     testSolution.PrintList(pHead);        
    116 
    117     delete pHead;
    118     pHead = NULL;
    119             
    120     cout << "Test bool insertInFront2(ListNode **pInHead, int inVal)
    " << endl;
    121 
    122     pHead = new ListNode(2);
    123 
    124     // Print Head node
    125     cout << "pHead = " << pHead << endl;
    126     if (pHead != NULL)
    127        cout << "pHead->val = " << pHead->val << endl;
    128     cout << endl;
    129 
    130     // Print Linkedlist
    131     cout << "PrintList(pHead)" << endl;
    132     testSolution.PrintList(pHead);        
    133     
    134     flag = testSolution.insertInFront2(&pHead, value);
    135     cout << "testSolution.insertInFront2(&pHead, value) = " << flag << "
    " << endl;
    136 
    137     // Print Head node
    138     cout << "pHead = " << pHead << endl;
    139     if (pHead != NULL)
    140        cout << "pHead->val = " << pHead->val << endl;
    141     cout << endl;
    142 
    143     // Print Linkedlist
    144     cout << "PrintList(pHead)" << endl;
    145     testSolution.PrintList(pHead);        
    146 
    147     delete pHead;
    148     pHead = NULL;
    149 
    150     cout << "Test ListNode *insertInFront3(ListNode *pInHead, int inVal)
    " << endl;
    151 
    152     pHead = new ListNode(3);
    153 
    154     // Print Head node
    155     cout << "pHead = " << pHead << endl;
    156     if (pHead != NULL)
    157        cout << "pHead->val = " << pHead->val << endl;
    158     cout << endl;
    159 
    160     // Print Linkedlist
    161     cout << "PrintList(pHead)" << endl;
    162     testSolution.PrintList(pHead);        
    163     
    164     pHead = testSolution.insertInFront3(pHead, value);
    165 
    166     // Print Head node
    167     cout << "pHead = " << pHead << endl;
    168     if (pHead != NULL)
    169        cout << "pHead->val = " << pHead->val << endl;
    170     cout << endl;
    171 
    172     // Print Linkedlist
    173     cout << "PrintList(pHead)" << endl;
    174     testSolution.PrintList(pHead);        
    175 
    176     delete pHead;
    177     pHead = NULL;
    178 
    179     getchar();
    180     
    181     return 0;
    182 }
    View Code
    • 遍历链表时,要不断的检查它的末尾。 E.g. head != NULL 
    • 删除链表
    • 注意删除顺序,指针移动赋值 
     1 #include <iostream>
     2 using namespace std;
     3 
     4 struct ListNode 
     5 {
     6        int val;
     7        ListNode *next;
     8        ListNode(int x = 0) : val(x), next(NULL) {}
     9 };
    10  
    11 class Solution 
    12 {
    13 public:
    14     void PrintList(ListNode *inListNode)
    15     {
    16          if (inListNode != NULL) {
    17             cout << inListNode->val << endl;
    18             PrintList(inListNode->next);
    19          } else
    20             cout << "NULL" << endl;
    21     }
    22     
    23     // Assign in ptr of the head ptr
    24     void DeleteList(ListNode **pInHead)
    25     {
    26          ListNode *pDel = *pInHead;
    27          
    28          while (pDel != NULL)
    29          {
    30                // Reserve the address of the next node
    31                ListNode *pNext = pDel->next;              
    32                // Delete the current node
    33                delete pDel;
    34                pDel = NULL;
    35                // Move to the next node
    36                pDel = pNext;
    37          }
    38 
    39          // Set head to NULL         
    40          *pInHead = NULL;
    41     }
    42 };
    43 
    44 int main ()
    45 {
    46     Solution testSolution;
    47     int count = 10;
    48     
    49     ListNode *pHead = NULL;
    50     ListNode *pCur = NULL;
    51     
    52     for (int i = 0; i < count; i ++)
    53     {
    54         ListNode *pTemp = new ListNode(i);
    55         
    56         if (i == 0)
    57             pHead = pCur = pTemp;
    58         else {
    59             pCur->next = pTemp;
    60             pCur = pCur->next; // pCur->next == pTemp
    61         }
    62     }
    63     
    64     // Print Head       
    65     cout << "pHead = " << pHead << endl;
    66     if (pHead != NULL)
    67        cout << "pHead->val = " << pHead->val << endl;
    68     cout << endl;
    69     
    70     // Print Linkedlist
    71     cout << "PrintList(pHead)" << endl;
    72     testSolution.PrintList(pHead);        
    73 
    74     cout << "Test DeleteList(pHead)
    " << endl;     
    75     testSolution.DeleteList(&pHead);
    76     
    77     // Print Head       
    78     cout << "pHead = " << pHead << endl;
    79     if (pHead != NULL)
    80        cout << "pHead->val = " << pHead->val << endl;
    81     cout << endl;
    82     
    83     // Print Linkedlist
    84     cout << "PrintList(pHead)" << endl;
    85     testSolution.PrintList(pHead);        
    86 
    87     getchar();
    88     
    89     return 0;
    90 }
    View Code
  • 相关阅读:
    UIGestureRecognizer在多层视图中的触发问题
    mysql出现Waiting for table metadata lock的原因及解决方案
    SQL逆向工程
    自己总结的ruby on rails 查询方法
    hdu 1536 SG函数模板题
    spring 源码分析之BeanPostProcessor
    spring bean生命周期管理--转
    java.lang.Long cannot be cast to java.lang.Integer解决办法
    Mybatis之Oracle增删查改示例--转
    Anti-If: The missing patterns--转
  • 原文地址:https://www.cnblogs.com/pegasus923/p/5589293.html
Copyright © 2011-2022 走看看