java学习笔记之链表(约瑟夫问题)

java与c#在比较字符串是否相等时不同:

equals()方法

      String的equals()方法用于比较两个字符串是否相等。由于字符串是对象类型,所以不能简单的用“==”(双等号)判断两个字符串是否相等,而使用equals()方法比较两个对象的内容。

约瑟夫问题:

节点类定义:

Node
public class Node
{
public String Content;
public Node Link;
public Node() 
{
    Content=null;
    Link=null;
}
public Node(String theContent)
{
    Content=theContent;
    Link=null;    
}
}

节点链接定义:

NodeList
public class NodeList
{     
    public Node Current;
    public Node Header;
    public int Count=0;
    //初始化(一次添加数据)
    public void Create(String str)
    {
        if(Count==0)
        {
            Header=new Node(str);    
            Current=Header;
            Count++;
        }
        else
        {
            Current.Link=new Node(str);
            Current=Current.Link;
            Count++;            
        }        
        Current.Link=Header;
    }
    //删除指定数据
    public void Remove(String str)
    {
        Node Info=Header;
        Node temp=Header;
        Current=Header;
        Node Last=Header;
        for(int i=0;i<Count;i++)
        {
            if(i==0&&Current.Content.equals(str))
            {
                //最后的没有指向Header
                for(int j=0;j<Count-1;j++)
                {
                    Last=Last.Link;
                }
                Header=temp.Link;
                Last.Link=Header;
                Info=Current;
                Count--;
            }
            else
            {
                
            if(Current.Content.equals(str))
            {
                temp.Link=Current.Link;
                Info=Current;
                Count--;
            }
            else
            {
                
            }
            temp=Current;
            Current=Current.Link;
            }
        }
        Current=Info;
    }
    
}

输出:

Output
public class Output 
{
    public static void main(String[] agrs)
    {
        NodeList Lists=new NodeList();
        for(int i=0;i<6;i++)
        {
        Lists.Create("str"+i);
        }
        Lists.Current=Lists.Header;
        //下面进行环绕(三人死一个)
        for(int j=0;j<6;j++)
        {        
            
            if(j%3==1)
            {
                
                Lists.Remove(Lists.Current.Content);
        /*        System.out.print(Lists.Current.Content+"\n");    */
                
            }
        
            Lists.Current=Lists.Current.Link;            
    }

        System.out.print("输出为:\n");
        Lists.Current=Lists.Header;
        for(int i=0;i<Lists.Count;i++)
        {
            if(Lists.Current!=null)
            {
            System.out.print(Lists.Current.Content+"\n");
            Lists.Current=Lists.Current.Link;
            }
        }
        
    }
}
原文地址:https://www.cnblogs.com/wangzhenghua/p/3026347.html