1.获取长度(其实本质就是遍历)
2.获取倒数第k个结点
3.链表翻转
4.链表逆序(利用栈的特点)
package com;
import java.util.Stack;
public class Demo {
public static void main(String[] args) {
Demo demo=new Demo();
Node one=new Node(1,"opop");
Node two=new Node(2,"lklk");
Node three=new Node(3,"hjhj");
demo.add(one);
demo.add(two);
demo.add(three);
reversePrint(demo.getHead());
// System.out.println(getLength(demo.getHead()));
// System.out.println(search(demo.getHead(),3));
//reverse(demo.getHead());
//demo.show();
}
private Node head=new Node(0,"");
public Node getHead() {
return head;
}
//add
public void add(Node node){
Node temp=head;
while(true)
{
if(temp.next==null)
break;
temp=temp.next;
}
temp.next=node;
}
//show
public void show(){
if(head.next==null)
return;
Node temp=head.next;
while(temp!=null)
{
System.out.println(temp);
temp=temp.next;
}
}
public static int getLength(Node head){
int count=0;
if(head.next==null)
return 0;
Node temp=head.next;
while(true)
{
if(temp==null)
break;
count++;
temp=temp.next;
}
return count;
}
//获取倒数第k个结点
public static Node search(Node head,int index){
if(head.next==null)
return null;
Node temp=head.next;
int count=0;
int size=getLength(head);
//遍历size-count个即可得到倒数第k个结点 (count是倒数第k个结点)
if(index<=0||index>size)
return null;
for(int i=0;i<size-index;i++)
temp=temp.next;
return temp;
}
//单链表翻转
public static void reverse(Node head){
if(head.next==null||head.next.next==null)
return ;
//定义辅助指针变量,遍历原来的链表
Node cur=head.next;
Node next=null; //指向当前cur的下一个结点
Node reverseNode=new Node(0,""); //????新链表
while(cur!=null)
{
next=cur.next;
cur.next=reverseNode.next;
reverseNode.next=cur;
cur=next;
}
head.next=reverseNode.next;
}
//逆序打印
public static void reversePrint(Node head){
Stack<Node> stack=new Stack<>();
if(head.next==null)
return;
Node cur=head.next;
while(cur!=null)
{
stack.push(cur);
cur=cur.next;
}
while(stack.size()>0)
System.out.println(stack.pop());
}
}