反转链表、逆序遍历单链表(栈)、查找单链表中倒数第k个节点



import java.util.Scanner;
import java.util.Stack;

/**
 * 
 * 反转链表、逆序遍历单链表(用栈解决)、查找单链表中倒数第k个节点
 *
 */
public class ReverseLinkedList {
	ReverseNode head=new ReverseNode(0,"","");
	   //统计当前链表的节点个数
	   public int nodeNumber(){
		   ReverseNode temp=head;
		   int count=0;
		   if(head.next==null){
			   return 0;
		   }
		   while(temp.next!=null){
			   count++;
			   temp=temp.next;
		   }
		   return count;
	   }
	   public void findLastKNode(int k){
		   ReverseNode temp=head;
		   if(head.next==null){
			   System.out.println("该链表为空!");
			   return;
		   }
		   if(k<0||k>nodeNumber()){
			   System.out.println("输入的数不合法或者大于链表长度!");
			   return;
		   }
		   for(int i=0;i<nodeNumber()-k;i++){
			   temp=temp.next;
		   }
		   System.out.println(temp.next);
	   }
       //反转链表
	   public void reverseLinkedList(){
		   //创建一个新的头节点(头插法)
		   ReverseNode reverseNode=new ReverseNode(0,"","");
		   //定义两个指针,cur1表示当前正在插入的节点,cur2表示之后准备要插入的节点
		   ReverseNode cur1=head.next;
		   ReverseNode cur2=cur1;
		   if(head.next==null){
			   System.out.println("该链表为空!");
			   return;
		   }
		   while(cur2!=null){	 
			   cur2=cur2.next;
			   cur1.next=reverseNode.next;
			   reverseNode.next=cur1;
			   cur1=cur2;
			   
		   }
		   head.next=reverseNode.next;
	   }
	   //逆序遍历单链表(栈)
	   public void lastTOBeginLinkedList(){
		   ReverseNode temp=head;
		   Stack<ReverseNode> stack=new Stack<>();
		   while(temp.next!=null){
			   stack.push(temp.next);
			   temp=temp.next;
		   }
		   while(stack.size()>0){
			   System.out.println(stack.pop());
		   }

	   }
	   //添加节点
	   public void addNode(ReverseNode node){
		   ReverseNode temp=head;
		   while(temp.next!=null){
			  temp=temp.next;
		   }
		     temp.next=node;
	   }
	   //显示链表
	   public void showReverseNode(){
		   ReverseNode temp=head.next;
		   if(head.next==null){
			   System.out.println("该链表为空!");
			   return;
		   }
		   while(temp!=null){
			   System.out.println(temp);
			   temp=temp.next;
		   }
	   }
       public static void main(String[] args){
    	   ReverseLinkedList reverseLinkedList=new ReverseLinkedList();
    	   ReverseNode node1=new ReverseNode(2,"林冲","豹子头");
    	   ReverseNode node2=new ReverseNode(8,"宋江","及时雨");
    	   ReverseNode node3=new ReverseNode(4,"鲁智深","花和尚");
    	   ReverseNode node4=new ReverseNode(1,"吴用","智多星");
    	   ReverseNode node5=new ReverseNode(9,"吴用1","智多星1");
    	   System.out.println("原链表如下:");
    	   reverseLinkedList.addNode(node1);
    	   reverseLinkedList.addNode(node2);
    	   reverseLinkedList.addNode(node3);
    	   reverseLinkedList.addNode(node4);
    	   reverseLinkedList.addNode(node5);
    	   reverseLinkedList.showReverseNode();
    	   
    	   System.out.println("反转后的链表如下:");
    	   reverseLinkedList.reverseLinkedList();
    	   reverseLinkedList.showReverseNode();
    	   
    	   System.out.println("逆序遍历后的链表如下:");   	   
    	   reverseLinkedList.lastTOBeginLinkedList();

    	   
    	   Scanner s=new Scanner(System.in);
    	   System.out.print("请输入要查找单链表中倒数第k个节点的序号:");
    	   int x=s.nextInt();
    	   reverseLinkedList.findLastKNode(x);
       }
}
class ReverseNode{
	public int no;
	public String username;
	public String rname;
	ReverseNode next;
	public ReverseNode(int no,String username,String rname){
		this.no=no;
		this.username=username;
		this.rname=rname;
	}	
	public String toString(){
		return "no="+no+" "+"username="+username+" "+"rname="+rname;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值