题目2.3:实现一个算法,删除单向链表中间的某个节点,只能访问该节点。

将后续节点的值复制到当前节点即可,但是最后一个节点就不能删除了。另外我的实现中没考虑只有一个节点或者为空的情况

 1 #include <iostream>
 2 #include <string>
 3 #include <fstream>
 4 #include <map>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <ctime>
 8 #include <bitset>
 9 
10 using namespace std;
11 
12 template<typename T>
13 class Node
14 {
15 public:
16     Node<T> *next;
17     T data;
18 
19     Node(T d):data(d),next(NULL){}
20     void appendToTail(T d)
21     {
22         Node<T> *end = new Node<T>(d);
23         Node<T> *n = this;
24         while(n->next != NULL)
25         {
26             n = n->next;
27         }
28         n->next = end;
29     }
30 };
31 
32 int main()
33 {
34     Node<int> *head = new Node<int>(1);
35     int i;
36     for(i = 2 ; i < 6 ; ++i)
37     {
38         head->appendToTail(i);
39     }
40     //2.3
41     int obj = 2;
42     //首先判断是否小于等于一个节点数
43     //假设大于1个节点数
44     Node<int> *headorg = head;
45     if(head->data == obj)
46         headorg = head->next;
47     else
48     {
49         while(head->data != obj)
50         {
51             head = head->next;
52         }
53         head->data = head->next->data;
54         head->next = head->next->next;
55     }
56     while(headorg != NULL)
57     {
58         cout<<headorg->data<<endl;
59         headorg = headorg->next;
60     }
61     return 0;
62 }