混子来了
单链表的创建:
首先单链表的定义就不再赘述了,本文利用带头节点,尾插法的方法进行创建,同时注意头节点在此的重要性,即所有操作都要通过头节点来实现,头节点的值绝对不能被改变
- 结点的定义
struct ListNode//定义节点
{
int m_key;
ListNode* next;
}A;
- 由于我们需要一个头节点,所以我们就先创建一个头节点
ListNode* head = NULL;
head = new ListNode;
head->next = NULL;
- 接下来就是创建一个单链表了
void createList(ListNode* pHead,int n)//创建单链表
{
ListNode* p = pHead;//不能改变头节点
for (int i = 1; i <= n; ++i)
{
ListNode* pNewNode = new ListNode;//申请一个新节点
cin>>pNewNode->m_key; // 将新节点的数据域赋值
pNewNode->next = NULL;//新节点的指针域置为空
p->next = pNewNode; // 上一个节点的指针域指向这个新节点
p = pNewNode; // p节点指向这个新节点
}
}
单链表的输出:
单链表的输出比较简单,就是利用头节点,找到第一个节点,当节点不为空时,输出数据域,然后节点后移
void print(ListNode*phead)
{
ListNode*p=phead->next;
while(p!=NULL)
{
cout<<p->m_key<<" ";
p=p->next;
}
cout<<endl;
}
单链表的插入:
还是直接上代码叭,有注释
void insertlist(ListNode*phead,int i,int e)
{
ListNode*p=phead->next;//利用头节点找到第一个节点
int j=0;
while(p)
{
j++;//判断指针位置
if(j<i-1)//将指针移到i-1位置
p=p->next;
else
break;
}
//在i-1和i中间插入数据
ListNode*s=new ListNode;//先建立新节点
s->m_key=e;//新节点的数据域赋值
s->next=p->next;//让新节点的指针域指向p节点的指针域的指向
p->next=s;//p节点指向新建立的节点
}
//可以画个图理解一下,有一点点小绕,哈哈
单链表的删除:
同上,我太懒了,哈哈
删除第i个节点就是让第i-1个节点的指针域指向第i+1个节点
void deletelist(ListNode*phead,int k)
{
ListNode*p=phead->next;//还是先找到第一个节点
int j=0;
while(p)//节点不为空时
{
j++;//判断指针位置
if(j<k-1)//让指针到达第i-1个位置
p=p->next;
else
break;
}
//删除第i个节点
p->next=p->next->next;
}
来一个完整代码叭:
先创建单链表,输入插入的位置和值,输出,再输入删除的位置,输出
其实就是个搬运工,把上面的代码抄下来,蛤蛤蛤
#include <iostream>
using namespace std;
struct ListNode//定义节点
{
int m_key;
ListNode* next;
}A;
void createList(ListNode* pHead,int n)//创建单链表
{
ListNode* p = pHead;//不能改变头节点
for (int i = 1; i <= n; ++i)
{
ListNode* pNewNode = new ListNode;//申请一个新节点
cin>>pNewNode->m_key; // 将新节点的数据域赋值
pNewNode->next = NULL;//新节点的指针域置为空
p->next = pNewNode; // 上一个节点的指针域指向这个新节点
p = pNewNode; // p节点指向这个新节点
}
}
void print(ListNode*phead)
{
ListNode*p=phead->next;
while(p!=NULL)
{
cout<<p->m_key<<" ";
p=p->next;
}
cout<<endl;
}
void insertlist(ListNode*phead,int i,int e)
{
ListNode*p=phead->next;
int j=0;
while(p)
{
j++;//判断指针位置
if(j<i-1)//将指针移到i-1位置
p=p->next;
else
break;
}
ListNode*s=new ListNode;//在i-1和i中间插入数据
s->m_key=e;
s->next=p->next;
p->next=s;
}
void deletelist(ListNode*phead,int k)
{
ListNode*p=phead->next;
int j=0;
while(p)
{
j++;
if(j<k-1)
p=p->next;
else
break;
}
p->next=p->next->next;
}
int main()
{
int n;
cin>>n;
ListNode* head = NULL;
head = new ListNode;
head->next = NULL;
createList(head,n);
int i,e;
cin>>i;
cin>>e;
insertlist(head,i,e);
print(head);
int k;
cin>>k;
deletelist(head,k);
print(head);
return 0;
}
还是给个运行的栗子叭
看了本文写的这几个,还有剩下的操作大家大概会了叭,我相信大嘎!!!
万水千山总是情,点个小赞行不行
阿里嘎多