1 将单链表反转
//将单链表反转
public static void reverseList(HeroNode head){ //传入的是链表的头节点
//如果链表为空或者只有一个节点,就直接返回
if(head.next==null||head.next.next==null){
return;`
}
HeroNode reverseHead=new HeroNode(0,"","");
HeroNode cur=head.next;
HeroNode next=null; //指向cur的下一个节点
//遍历原来的链表,每遍历一个节点,就将其取出,并放在新的链表reverseHead的最前端
while(cur!=null){
next=cur.next; //先暂时保存当前节点的下一个节点
cur.next=reverseHead.next; //将cur的下一个节点指向新链表的最前端
reverseHead.next=cur;
cur=next;
}
head.next=reverseHead.next;
}
2 查找单链表中的倒数第K个节点
//查找单链表中的倒数第K个节点
//思路
//编写一个方法接收head节点,接收一个index,index表示倒数第index个节点
//先从头到尾遍历链表得到链表的有效个数,调用getLength方法
//得到size后,我们从链表的第一个开始遍历(size-index)个
//如果找到就返回该节点,如果没找到就返回空
public static HeroNode FindLastIndexNode(HeroNode head,int index){
//判断链表是否为空
if(head.next==null){
return null;
}
int size=getLength(head); //获取链表的长度
//先做一个index的校验
if(index<=0||index>size){
return null;
}
HeroNode temp=head.next; //这里不是head而是head.next开始遍历,遍历size-index次就找到了倒数第Index个节点
for (int i = 0; i <size-index ; i++) {
temp=temp.next;
}
return temp;
}
3 获取单链表有效节点的个数
//方法:获取单链表的节点的个数(如果是带头结点的链表不统计头结点)
/**
*
* @param head 链表的头结点
* @return 返回的是有效节点的个数
*/
public static int getLength(HeroNode head){
if(head.next==null){ //说明这是一个带头结点的空链表
return 0;
}
HeroNode temp=head.next; //定义一个辅助节点,这里我们没有统计头节点
int length=0;
while(temp!=null){
length++;
temp=temp.next;
}
return length;
}
4 逆序打印
//方式1,将链表反转后打印(不推荐,改变了链表的结构)
//方式2,利用栈这种数据结构先进后出的特点实现逆序打印
public static void reversePrint(HeroNode head){
if(head.next==null){return;} //空链表直接返回
//创建一个栈,将各个节点压进栈中
Stack<HeroNode> stack = new Stack<HeroNode>();
HeroNode cur=head.next;
//将链表的所有节点压进栈中
while(cur!=null){
stack.push(cur);
cur=cur.next;
}
while(stack.size()>0){
System.out.println(stack.pop());
}
}
5 合并两个有序的单链表使之合并之后仍然有序