思路有两个:
1、利用递归思路,这样比较耗时,但是省空间。
2、既然能够使用递归,就能使用栈来操作。
首先要涉及到链表的定义和初始化:
struct LinkNode{
int value;
LinkNode *next;
LinkNode(int value1, LinkNode *next1 = nullptr){
value = value1;
next = next1;
}
};
int main(){
LinkNode *head;
head = new LinkNode;
head->value = 1;
// head->next = Null;
LinkNode *second = new LinkNode;
second->value = 2;
// second->next = Null;
head->next = second;
cout<<"first linklist"<<head->value<<endl;
cout<<"second linklist"<<head->next->value<<endl;
return 0;
}
这里需要注明:nullptr是C++11才开始使用的关键字,为了和C中的null区别。C中的null表明的是一个void指针,C++中的NULL表明数字0,但是有时却可以表示一个void指针,所以为了区分两者,C++11中开始只用关键字nullptr表示一个空指针,null就表示0(int)。
代码实现两种思路:
//递归思路
void find(LinkNode *L){
find(L->next);
cout<<L->value<<endl;
}
//使用栈来实现
void find1(LinkNode *L){
std::stack<int> S;
while(L->next!=nullptr){
S.push(L-value);
L = L->next;
}
while(!S.empty()){
cout<<S.pop()<<endl;
}
}