链表实现
输入数字并输出的链表
#include<iostream> #include <stdlib.h> using namespace std; struct Node { int data; struct Node*next; }; int main() { int num; cin>>num; Node*head,*p,*q,*t; head=NULL; for(int i=0;i<num;i++) { p=(struct Node*)malloc(sizeof(struct Node)); cin>>p->data; p->next=NULL; if(head==NULL) { head=p; } q->next=p; q=q->next; } for(t=head;t!=NULL;t=t->next) { cout<<t->data; } }
p->data相当于*p.data
要设置头指针
牢记指向下一个结点
不可以用p=p->next;
#include<iostream> #include <stdlib.h> using namespace std; struct Node { int data; struct Node*next; }; int main() { Node*head,*p,*q,*t; head=(struct Node*)malloc(sizeof(struct Node)); p=(struct Node*)malloc(sizeof(struct Node)); head=p; cin>>p->data; p=p->next; // head=p;1 p=(struct Node*)malloc(sizeof(struct Node)); // head=p;2 cin>>p->data; cout<<head->data; } //head=p这一句放在一处不能正确输出结果,只有放在二处才可以,因为一处p结点还没有分配空间
双向链表
#include<iostream> #include<stdlib.h> using namespace std; struct Node { int data; struct Node *next; struct Node *pri; }; int main() { int num,n; cin>>num; Node *head,*p,*q; head=NULL; head = p = new Node; for(int i=0;i<num;i++) { p->next=new Node; cin>>n; p->data=n; q=p; p=p->next; p->pri=q; } p->next=NULL; for(p=head;p->next!=NULL;p=p->next) { cout<<p->data<<" "; } cout<<endl; for(p=p->pri;p!=head->pri;p=p->pri) { cout<<p->data<<" "; } }