「单链表逆置java」单链表逆置递归
本篇文章给大家谈谈单链表逆置java,以及单链表逆置递归对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
单链表逆置算法详解
首先创建一个单链表,返回一个头节点的指针( head 该头节点不为 NULL,
其次进行单链表的逆置设置。具体设置方法见下:
根据不同的长度依次进行逆置
单链表的逆置怎么办?
#include stdio.h
#include stdlib.h
typedef struct node
{
int data;
struct node *next;
}Node;
//创建链表
Node *CreatList(void)
p = (Node *)malloc(sizeof(Node));
p-data = i;
if(head == NULL)
q = head = p;
else
q-next = p;
q = p;
scanf("%d", i);
}
p-next = NULL;
return head;
}
//链表的逆置
Node *ReverseList(Node *head)
{
Node *p, *q, *r;
p = head;
q=r=NULL;
while(p)
//输出链表
void PrintList(Node *head)
{
Node *p;
p = head;
while(p)
{
printf("%d\n", p-data);
p = p-next;
}
}
int main(void)
{
Node *head;
head = CreatList();
printf("链表逆置前的数据:\n");
PrintList(head);
head = ReverseList(head);
printf("链表逆置后的数据:\n");
PrintList(head);
存储表示:
① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。
用java来编写一个单链表类的成员函数,实现对头结点的单链表就地逆置的操作
逆置有两种方法,第一是把所有节点反过来。还有一种就是改变节点中的值。
第一种情况,其实可以考虑用头插法,来实现逆置。
下面的算法是基于头插法的思想,逆置链表的,仅供参考。
LinkList anti_linklist(LinkList demo)
{
LInkList *p,*q;//work pointer
LinkList head;
head=new LinkList();
head-next=null;//init head pointer
p=demo-head-next;//make p points to the first node
if(p==null)
return null;//the linklist is null
while(p!=null)
{
q=p;
q-next=head-next;
head-next=q;
p=p-next;
}
}
单链表就地逆置的两种方法(递归与普通循环)
一、用递归算法
对于不带头结点的单链表(a1,a2,a3,a4,a5,a6)逆置后的结果为(a6,a5,a4,a3,a2,a1)
考虑递归算法,若只有一个结点,则直接返回,若存在两个结点(a1,a2)则需要做的操作有:
a2-next=a1;a1-next=NULL;return a2;
a2即新的头结点,若有三个结点,则应先将子链(a2,a3)先逆置且返回该子链的新的头结点,然后把子链(a2,a3)当作一个复合结点a2',组成新的二元组(a1,a2')然后就可以执行前面相同的操作:a2'-next=a1;a1-next=NULL;return a3'; 即可,多个以上的结点可同理得到,
Node *Reverse(Node *head)
{
Node *p=head;
if(p==NULL)
return NULL; //若是空链表,返回空
Node *q=p-next;
if(q==NULL)
return p; //若只有一个结点,直接返回
else
head=Reverse(q);//记录子序列的新的头结点
q-next=p; //当前结点与已经逆置的子序列看成是前后的两个结点p,q,作相应的逆置操作
p-next=NULL;
return head; //返回新的子序列的头结点
}
二、用普通算法循环逆置(头插法重新建立带头结点的新链表)
参考链接:
关于单链表逆置java和单链表逆置递归的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。