LinkList的create,delete,print

LinkList中指针的操作比较多,今天总算是搞明白了,先把代码记录一下。

#include <iostream>
#include<stack>
using namespace std;




typedef struct LinkNode{
int val;
struct LinkNode * next;
}LinkNode;




LinkNode * CreateLinkNode(int val){
LinkNode* node=new LinkNode();
node->val=val;
node->next=NULL;
return node;
}


void AddToTail(LinkNode ** phead,int val){
LinkNode* p=CreateLinkNode(val);
if(*phead==NULL){
*phead=p;
}else{
LinkNode* t=*phead;
while(t->next!=NULL){
t=t->next;
}
t->next=p;
}
}


void  AddToHead(LinkNode** phead,int val){
LinkNode* node=CreateLinkNode(val);
if(*phead==NULL){
*phead=node;
}else{
node->next=*phead;
*phead=node;
}
}


void RemoveNode(LinkNode** phead,int val){


if(phead==NULL||(*phead==NULL))
return ;
LinkNode * pDelete=NULL;


if((*phead)->val==val){
pDelete=*phead;
*phead=pDelete->next;
}else{
LinkNode* node=*phead;
while((node->next!=NULL)&&(node->next->val!=val))
node=node->next;
if(node->next!=NULL&&(node->next->val==val)){
pDelete=node->next;
node->next=node->next->next;
}
}
if(pDelete!=NULL){
delete pDelete;
pDelete=NULL;
}
}


void PrintLinkList(LinkNode* phead){
if(phead==NULL)
return;
LinkNode* p=phead;
cout<<"Print List"<<endl;
while(p){
cout<<p->val<<",";
p=p->next;
}
cout<<endl<<endl;
}


void PrintReverse(LinkNode* phead){


if(phead==NULL)
return ;


stack<LinkNode *> st;
LinkNode* p=phead;


while(p){
st.push(p);
p=p->next;
}
cout<<"Reverse Print List"<<endl;
while(!st.empty()){
cout<<st.top()->val<<",";
st.pop();
}
cout<<endl<<endl;
}


void PrintRecursion(LinkNode* phead){
if(phead->next==NULL){
cout<<phead->val<<",";
return ;
}

PrintRecursion(phead->next);
cout<<phead->val<<",";
}


void PrintRec(LinkNode* phead){
cout<<"递归形式的从尾到头遍历:"<<endl;
PrintRecursion(phead);
}
int main(){
int val[10]={1,2,3,4,5,6,7,8,9,10};
LinkNode* L=NULL;


int i=0;
for(i=0;i<10;i++){
AddToTail(&L,val[i]);
}
PrintReverse(L);
PrintLinkList(L);
PrintRec(L);


return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值