创建链表: 头插法
出于个人理解 :创建链表的过程 就是在逐步申请空间 ,同时进行赋值操作。可以把链表看作澡堂存放衣物的柜子(但不是逐个相挨的,可以离散分部),上边的格子用于存放数据,下边的格子用于地址,用于连接 next 柜子 多个柜子连接形成链表 从而进行其他操作
话不多说,代码如下:
main函数中 申请头节点空间,操作如下:
打印链表:
从头节点遍历 输出 找到遍历的停止是关键所在
倒置链表:
思想 需要三个指针 来进行倒置操作
p q pn
初始化 p = head ->next ; q =NULL; head->next=NULL;(保留头节点)
遍历链表 pn = p->next ; p->next=q; q=p; p=pn;
最后 head->next=q;
将1给q (q=p) ,p=2(p=pr) 依次进行
具体代码:
全部代码(卑微作者 不喜勿喷 如有高见,请不吝赐教):
#include<iostream>
using namespace std;
struct List
{
int data;
struct List *next;
} ;
//创建链表
void Create(List * head);
//打印链表
void Prin(List *head);
//倒置
List *reverse(List *head);
int main()
{
List *head=NULL;
head=new List;
Create(head);
Prin(head);
head=reverse(head);
Prin(head);
return 0;
}
//创建链表
void Create(List * head)
{
for(int i=0;i<4;i++)
{
List *p=new List;
p->data=i;
p->next=NULL;
head->next=p;
head=p;
}
}
//打印链表
void Prin(List *head)
{
while(head->next!=NULL)
{
cout<<head->next->data<<" ";
head=head->next;
}
cout<<endl;
}
//倒置 返回头节点
List *reverse(List *head){
List *p,*q,*pr;
p=head->next;
q=NULL;
head->next=NULL;
while(p)
{
pr=p->next;
p->next=q;
q=p;
p=pr;
}
head->next=q;
return head;
}