单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。
来源:互联网 发布:周立功单片机 招聘 编辑:程序博客网 时间:2024/06/06 06:51
最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:
还添加了一个删除结点的操作。
#include<iostream>
using namespace std;
typedef int ItemType;
typedef struct ListNode
{
ItemType item;
ListNode * next;
}LinkList,*pLinkList;
pLinkList head=NULL;
int size=0;
pLinkList find(int index)
{
pLinkList point=head;
for(int i=1;i<index;i++)
point=point->next;
return point;
}
void insert(int index1,ItemType newData)
{
size++;
pLinkList pre=find(index1-1);
pLinkList Ptr=new LinkList;
Ptr->item=newData;
if(index1==1)
{
Ptr->next=head;
head=Ptr;
}
else
{
Ptr->next=pre->next;
pre->next=Ptr;
}
}
void reverse(LinkList*& H)
{
if(H==NULL)
return;
pLinkList pre1=head;
pLinkList cur=head->next;
pLinkList ne;
while(cur!=NULL)
{
ne=cur->next;
cur->next=pre1;
pre1=cur;
cur=ne;
}
H=NULL;
H=pre1;
}
void show()
{
pLinkList p=head;
for(int i=0;i<size;i++)
{
cout<<p->item<<' ';
p=p->next;
}
}
void remove(int index2)
{
--size;
pLinkList pp=find(index2-1);
pLinkList pTemp=pp->next;
pp->next=pTemp->next;
pTemp->next=NULL;
delete pTemp;
pTemp=NULL;
}
int main()
{
for(int i=1;i<11;i++)
insert(i,i);
cout<<"翻转前为: ";
show();
remove(7);
reverse(head);
cout<<endl<<"翻转后为: ";
show();
return 0;
}
- 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。
- 单向链表的一个面试题
- 反转一个单向链表
- 乐视面试题一个数组,找出数组中没有出现的最小的一个数字,比如[1,2,0],返回3,[1,2,4,5]返回3
- 一个关于字符串反转的问题;
- 一个字符串反转的方法
- 反转一个字节的算法
- 反转一个整数的位
- 反转字符串的一个函数
- 反转一个字符串的算法
- 一个很好的反转效果
- 对一个二进制的每位进行0和1反转,求反转后的二进制所对应的十进制数
- c语言是一个基础的课程,但是,也是很难的一个课程,我是这样认为的!
- 返回一个二进制位模式反转后的值
- 将一个输入的单词反转后输出
- 48.微软: 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5} 是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。
- 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。
- 一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。
- 虚拟继承
- GetBrowserType.html
- String str = null、String str = ""、String str = new String()中所声明对象str之间的区别:
- SAP HR信息类型
- NetBeans之JSP开发环境的搭建...
- 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。
- AlarmManager的使用
- Java中的栈和堆总结:
- 一年轻女董事长对同龄人的忠告:不想穷的要看看
- OLEDB与ADO 、ADO.NET
- HR相关表
- Google drive 安装
- ASP.NET跨页提交和表单提交
- jquerymobile局部渲染的各种刷新