「算法旋转链表java」链表的转置算法

博主:adminadmin 2022-12-03 09:15:05 62

本篇文章给大家谈谈算法旋转链表java,以及链表的转置算法对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java:已知单链表H,利用栈的原理写一个算法将其倒置

import myjava.Node;

import myjava.SinglyLinkedList;

import myjava.SeqStack;

public class ReverseLinkedListE extends SinglyLinkedListE {

public ReverseLinkedList(){

super();

}

public void reverse(ReverseLinkedListE list){

SeqStackE stack = new SeqStackE();

NodeE p = this.head ;

while(p != null){

stack.push(p.data);

p = p.next;

}

list.clear();

while(!stack.isEmpty()){

list.add(stack.pop());

}

}

public static void main (String[] args) {

ReverseLinkedListInteger list = new ReverseLinkedListInteger();

for(int i = 1;i 6;i++){

list.add(0,new Integer(i));

}

System.out.println("单列表 "+list.toString());

list.reverse(list);

System.out.println("逆转后 "+list.toString());

}

}

java版递归算法实现单链表的求长度、查找、替换等操作

首先,你实现链表的时候肯定是有一个变量记录链表大小的,求长度,直接获取链表大小就可以。

查找:有两种,一种是下标查找,还有一种是对象查找。其实底层归根结底都是用的index下标查找。 替换也是同道理。你要明白链表的原理,我相信你就不会问递归去做这些操作。

因为你查找只要给出下标,直接在for循环在0到你给定的下标内循环就能取到,如果你给的下标在链表大小/2 的后半部分,你可以倒序循环;当然这只是一种思路,希望能帮到你

双向循环链表java

我们也做这个,,你是是吧

package KeCheng1;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Iterator;

import java.util.Scanner;

//定义节点类

class NodeAnyType {

public AnyType data;

public NodeAnyType prev;

public NodeAnyType next;

public Node(AnyType d,NodeAnyType p,NodeAnyType n){

data=d;

prev=p;

next=n;}}

public class MyLinkedListAnyType {

private int theSize;

private NodeAnyType beginMarker; //头标记或头节点

private NodeAnyType endMarker; //尾标记或尾节点

public MyLinkedList(){

beginMarker=new NodeAnyType(null,endMarker,endMarker);

endMarker = new NodeAnyType(null,beginMarker,beginMarker);

beginMarker.next = endMarker;

theSize = 0;}

public int size(){

return theSize;}

public boolean add(AnyType x){

add(size(),x);

return true;}

public void add(int idx,AnyType x){

NodeAnyType p;

p=getNode(idx);

addBefore(p,x);}

private NodeAnyType getNode(int idx) {

NodeAnyType p;

if( idx 0 || idx size( ) )

throw new IndexOutOfBoundsException( );

if( idx size( ) / 2 ) {

p = beginMarker.next;

for( int i = 0; i idx; i++ )

p = p.next;}

else

{ p = endMarker;

for( int i = size( ); i idx; i-- )

p = p.prev; }

return p;}

private void addBefore( NodeAnyType p, AnyType x ) {

NodeAnyType newNode = new NodeAnyType( x, p.prev, p );

newNode.prev.next = newNode;

p.prev = newNode;

theSize++;}

public AnyType remove( int idx ){

return remove( getNode(idx));}

private AnyType remove(NodeAnyType p){

p.next.prev = p.prev;

p.prev.next = p.next;

theSize--;

return p.data;}

public void print(){//输出链表

for(NodeAnyTypex=beginMarker.next;x.next!=beginMarker;x=x.next)

System.out.print(x.data+" ");

System.out.print("\n");}

public AnyType get( int idx ){

return getNode( idx ).data; }

public static void main(String[] args){

MyLinkedListInteger La = new MyLinkedListInteger();

int Length;

Scanner sc = new Scanner(System.in);

System.out.println("请输入要创建的双向链表的长度:(大于6)");

Length = sc.nextInt();

System.out.println("请输入"+Length+"个元素创建La双向链表:");

for(int i=0;iLength;i++)

{La.add(sc.nextInt());}

System.out.println("输入的原La双向链表:");

La.print();

System.out.println("在双向链表的第3个位置插入20:");

La.add(3,20);

La.print();

System.out.println("删除第五位置上的数:");

La.remove(5);

La.print();

System.out.println("插入最后一个节点:99");

La.add(Length,99);

La.print();

System.out.println("插入第一个节点0:");

La.add(0,0);

La.print();

System.out.println("就地逆置:");

int M=Length+2;

int b=0;

for(Length=Length+1;Length=0;Length--){

int a=La.get(M-1);

La.add(b,a);

b=b+1;

La.remove(M);

}

La.print();

}

}

用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;

}

}

关于算法旋转链表java和链表的转置算法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-03,除非注明,否则均为首码项目网原创文章,转载请注明出处。