1 #include "stdafx.h"
2 #include<string>
3 #include<iostream>
4 #include<stack>
5 using namespace std;
6
7 struct ListNode
8 {
9 //结点类型
10 int m_nValue;
11 ListNode* m_pNext;
12 };
13
14 void AddToTail(ListNode** pHead,int value)
15 {
16 //尾插法
17 ListNode* pNew = new ListNode();
18 pNew->m_nValue = value;
19 pNew->m_pNext = NULL;
20 if(*pHead==NULL)
21 {
22 *pHead = pNew;
23 }else
24 {
25 ListNode *pNode = *pHead;
26 while(pNode->m_pNext !=NULL)
27 {
28 pNode =pNode->m_pNext;
29 }
30 pNode ->m_pNext = pNew;
31 }
32 }
33
34 void AddToHead(ListNode** pHead,int value)
35 {
36 //头插法
37 ListNode *pNew = new ListNode;
38 pNew->m_nValue = value;
39 pNew->m_pNext = NULL;
40
41 if(*pHead==NULL)
42 {
43 *pHead =pNew;
44 }
45 else
46 {
47 ListNode *Head = *pHead;
48
49 pNew->m_pNext = Head;
50 (*pHead) = pNew;
51
52 }
53 }
54
55 void showNode(const ListNode *Head)
56 {
57 int count = 0;
58 while(Head!=NULL)
59 {
60 cout<<Head->m_nValue<<" ";
61 Head=Head->m_pNext;
62 count++;
63 }
64 cout<<endl<<"元素个数:"<<count<<endl;;
65
66 }
67
68 void InsertNodeByArray(int *arr,int length,ListNode** Head)
69 {
70 //通过数组进行插入元素
71 for(int i =0;i!=length;++i)
72 {
73 AddToTail(Head,arr[i]);
74 }
75 }
76
77 void RemoveNode(ListNode** Head,int value)
78 {
79 //删除元素内容是value的所有结点,注意第一个元素和最后一个元素
80 if(*Head==NULL)
81 {
82 cout<<"Can not Find the value:"<<value<<endl;
83 return;
84 }
85 ListNode *pHead = *Head;
86 ListNode *pDelete;
87 if(pHead->m_nValue==value)
88 {
89 pDelete = *Head;
90 (*Head)=pDelete ->m_pNext;
91 delete pDelete;
92 pDelete = NULL;
93 return;
94 }
95 else
96 {
97 while(pHead->m_pNext!=NULL){
98 while(pHead->m_pNext!=NULL&&pHead->m_pNext->m_nValue!=value)
99 {
100 pHead=pHead->m_pNext;
101 }
102
103 if(pHead->m_pNext!=NULL&&pHead->m_pNext->m_nValue==value)
104 {
105 cout<<"Find The Node,The value is:"<<value<<endl;
106 pDelete =pHead->m_pNext;
107 if(pDelete->m_pNext!=NULL){
108 pHead->m_pNext=pDelete->m_pNext;
109 pHead=pHead->m_pNext;
110 delete pDelete;
111 pDelete = NULL;
112 }
113 else
114 {
115 pHead->m_pNext=NULL;
116 delete pDelete;
117 pDelete = NULL;
118 return;
119 }
120 }
121 }
122 }
123 }
124
125
126 void resverseList(ListNode *Node)
127 {
128 if(Node!=NULL){
129 if(Node->m_pNext!=NULL)
130 {
131 resverseList(Node->m_pNext);
132 }
133 cout<<Node->m_nValue<<" ";
134 }
135 //递归实现反向遍历链表
136 }
137
138 void resverseList_Stack(ListNode *Node)
139 {
140 //用stack逆向输出.
141 stack<ListNode*> sNode;
142 ListNode *pNode = Node;
143 while(pNode!=NULL)
144 {
145 sNode.push(pNode);
146 pNode=pNode->m_pNext;
147 }
148
149 while(!sNode.empty())
150 {
151 cout<< sNode.top()->m_nValue<<" ";
152 sNode.pop();
153 }
154 //递归实现反向遍历链表
155 }
156
157
158 int _tmain(int argc, _TCHAR* argv[])
159 {
160 const int len = 3;
161 ListNode *Head=NULL;
162 int a[len]={1,2,3};
163 InsertNodeByArray(a,len,&Head);
164 showNode(Head);
165 RemoveNode(&Head,1);
166 showNode(Head);
167 resverseList(Head);
168 cout<<endl;
169 resverseList_Stack(Head);
170 return 0;
171 }