删除链表节点   
               添加时间:2013-5-10 点击量: 
 
              注:所讲述链表不带零丁的头结点、
  删除结点其实是一个很简单的题目,其关键在索要善删除的结点是第一个结点是,头结点位的解决。 
  若是头结点须要零丁进行操纵,其源码如下:
             1: int del_node(linka head, int elem) {
       2:     if(head ==NULL || head ==NULL)
       3:         return -1; //链表为空,删除失败
       4:  
       5:     linka tmp = NULL;
       6:  
       7:     if( (head) ->data == elem)
       8:     {
       9:         tmp = head ;
      10:         head = (head) ->next;
      11:          tmp;        
      12:         return 0;
      13:     }
      14:  
      15:     linka phead =head;
      16:     linka pre=phead;
      17:     linka cur=phead->next;    
      18:     while(cur)
      19:     {
      20:         if( cur->data == elem)
      21:         {    
      22:             pre ->next= cur->next;
      23:             break;
      24:         }else
      25:         {
      26:             pre= cur;
      27:             cur = cur->next ;
      28:         }        
      29:     }
      30:     if(cur == NULL){
      31:         return -1;
      32:     }else{
      33:          cur;
      34:         return 0;
      35:     }
      36: }
删除链表结点算法完全源代码(VS2010编译):
  
       1: // code-summary.cpp : 定义把握台应用法度的进口点。
       2:  
       3: /
       4:      Copyright (c) 2013,  All rights reserved.
       5:      文件名称    : code-summary.cpp
       6:      文件标识    :
       7:      摘    要    : 链表节点删除 
       8:      
       9:      当前版本    : Ver 1.0
      10:      作者    : 徐冬冬 华科
      11:      完成日期    : 2013/05/10
      12:     
      13:      庖代版本    : 
      14:      原作者    :
      15:      完成日期    :  
      16:      开放版权  : GNU General Public License GPLv3
      17: /
      18: #include "stdafx.h"
      19:  
      20: #include <iostream>
      21: #include <random>
      22: #include <stack>
      23: using namespace std;
      24: //链表节点删除
      25:&#160; 
      26: struct linka {
      27:     int data;
      28:     linka next;
      29: };
      30: void print(linka head);
      31: typedef linka link;
      32:&#160; 
      33: void init(link head)
      34: {
      35:     int i= 0;
      36:     link phead = NULL;
      37:     link cur = NULL;
      38:     for (i= 0 ;i< 10;i++)
      39:     {
      40:         cur = new link ;
      41:         cur ->data  =rand();
      42:         cur->next = phead;
      43:         phead =cur ;
      44:     }
      45:     head = phead;
      46:     return ;
      47: }
      48:&#160; 
      49: void print(link head)
      50: {
      51:     int i=0;
      52:     link cur=head;
      53:     for ( ; cur != NULL ; cur= cur->next)
      54:     {
      55:         cout<< cur ->data <<\t ;
      56:     }
      57:     cout<<endl;
      58: }
      59:&#160; 
      60: int del_node(linka head, int elem) {
      61:     if(head ==NULL || head ==NULL)
      62:         return -1; //链表为空,删除失败
      63:&#160; 
      64:     linka tmp = NULL;
      65:&#160; 
      66:     if( (head) ->data == elem)
      67:     {
      68:         tmp = head ;
      69:         head = (head) ->next;
      70:          tmp;        
      71:         return 0;
      72:     }
      73:&#160; 
      74:     linka phead =head;
      75:     linka pre=phead;
      76:     linka cur=phead->next;    
      77:     while(cur)
      78:     {
      79:         if( cur->data == elem)
      80:         {    
      81:             pre ->next= cur->next;
      82:             break;
      83:         }else
      84:         {
      85:             pre= cur;
      86:             cur = cur->next ;
      87:         }        
      88:     }
      89:     if(cur == NULL){
      90:         return -1;
      91:     }else{
      92:          cur;
      93:         return 0;
      94:     }
      95: }
      96:&#160; 
      97:&#160; 
      98:&#160; 
      99: int _tmain(int argc, _TCHAR argv[])
     100: {
     101:     linka head =NULL ;
     102:     init(&head);
     103:     print(head);
     104:     int i= del_node(&head ,6334);
     105:     if (i ==-1)
     106:     {
     107:         cout<<"not found"<<endl;
     108:     }
     109:     print(head);
     110:&#160; 
     111:     system("pause");
     112:     return 0;
     113: }
     114:&#160; 
原来,再大的房子,再大的床,没有相爱的人陪伴,都只是冰冷的物质。而如果身边有爱人陪伴,即使房子小,床小,也觉得无关紧要,因为这些物质上面有了爱的温度,成了家的元素。—— 何珞《婚房》#书摘#
                     
                  
     
  
 
    
    
注:所讲述链表不带零丁的头结点、
删除结点其实是一个很简单的题目,其关键在索要善删除的结点是第一个结点是,头结点位的解决。
若是头结点须要零丁进行操纵,其源码如下:
1: int del_node(linka head, int elem) {
2: if(head ==NULL || head ==NULL)
3: return -1; //链表为空,删除失败
   4:&#160; 
   5:     linka tmp = NULL;
   6:&#160; 
7: if( (head) ->data == elem)
   8:     {
   9:         tmp = head ;
  10:         head = (head) ->next;
  11:          tmp;        
12: return 0;
  13:     }
  14:&#160; 
  15:     linka phead =head;
  16:     linka pre=phead;
  17:     linka cur=phead->next;    
18: while(cur)
  19:     {
20: if( cur->data == elem)
  21:         {    
  22:             pre ->next= cur->next;
23: break;
24: }else
  25:         {
  26:             pre= cur;
  27:             cur = cur->next ;
  28:         }        
  29:     }
30: if(cur == NULL){
31: return -1;
32: }else{
  33:          cur;
34: return 0;
  35:     }
  36: }
删除链表结点算法完全源代码(VS2010编译):
1: // code-summary.cpp : 定义把握台应用法度的进口点。
   2:&#160; 
3: /
4: Copyright (c) 2013, All rights reserved.
5: 文件名称 : code-summary.cpp
6: 文件标识 :
7: 摘 要 : 链表节点删除
8:
9: 当前版本 : Ver 1.0
10: 作者 : 徐冬冬 华科
11: 完成日期 : 2013/05/10
12:
13: 庖代版本 :
14: 原作者 :
15: 完成日期 :
16: 开放版权 : GNU General Public License GPLv3
17: /
18: #include "stdafx.h"
  19:&#160; 
20: #include <iostream>
21: #include <random>
22: #include <stack>
23: using namespace std;
24: //链表节点删除
  25:&#160; 
26: struct linka {
27: int data;
  28:     linka next;
  29: };
30: void print(linka head);
31: typedef linka link;
  32:&#160; 
33: void init(link head)
  34: {
35: int i= 0;
  36:     link phead = NULL;
  37:     link cur = NULL;
38: for (i= 0 ;i< 10;i++)
  39:     {
40: cur = new link ;
  41:         cur ->data  =rand();
  42:         cur->next = phead;
  43:         phead =cur ;
  44:     }
  45:     head = phead;
46: return ;
  47: }
  48:&#160; 
49: void print(link head)
  50: {
51: int i=0;
  52:     link cur=head;
53: for ( ; cur != NULL ; cur= cur->next)
  54:     {
55: cout<< cur ->data <<\t ;
  56:     }
  57:     cout<<endl;
  58: }
  59:&#160; 
60: int del_node(linka head, int elem) {
61: if(head ==NULL || head ==NULL)
62: return -1; //链表为空,删除失败
  63:&#160; 
  64:     linka tmp = NULL;
  65:&#160; 
66: if( (head) ->data == elem)
  67:     {
  68:         tmp = head ;
  69:         head = (head) ->next;
  70:          tmp;        
71: return 0;
  72:     }
  73:&#160; 
  74:     linka phead =head;
  75:     linka pre=phead;
  76:     linka cur=phead->next;    
77: while(cur)
  78:     {
79: if( cur->data == elem)
  80:         {    
  81:             pre ->next= cur->next;
82: break;
83: }else
  84:         {
  85:             pre= cur;
  86:             cur = cur->next ;
  87:         }        
  88:     }
89: if(cur == NULL){
90: return -1;
91: }else{
  92:          cur;
93: return 0;
  94:     }
  95: }
  96:&#160; 
  97:&#160; 
  98:&#160; 
99: int _tmain(int argc, _TCHAR argv[])
 100: {
 101:     linka head =NULL ;
 102:     init(&head);
 103:     print(head);
104: int i= del_node(&head ,6334);
105: if (i ==-1)
 106:     {
107: cout<<"not found"<<endl;
 108:     }
 109:     print(head);
 110:&#160; 
111: system("pause");
112: return 0;
 113: }
 114:&#160; 




