LinkList的create,delete,print

来源:互联网 发布:js获取元素的父节点 编辑:程序博客网 时间:2024/06/06 04:04

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;
}




原创粉丝点击