1.求单向链表的有效节点个数(不统计头节点)
public static int getLength(HeroNode head){
if(head.next == null){
return 0;
}
int length = 0;
HeroNode cur = head.next;
while(cur != null){
length++;
cur = cur.next;
}
return length;
}
2.查询单向链表中的倒数第k个节点
public static int getLength(HeroNode head){
if(head.next == null){
return 0;
}
int length = 0;
HeroNode cur = head.next;
while(cur != null){
length++;
cur = cur.next;
}
return length;
}
public static HeroNode findLastIndexNode(HeroNode head,int index){
if(head.next == null){
return null;
}
int size = getLength(head);
if(index <= 0 || index > size){
return null;
}
HeroNode cur = head.next;
for (int i = 0; i < size-index; i++) {
cur = cur.next;
}
return cur;
}
3.单向链表的反转
思路:
- 先定义一个节点reverseHead = new HeroNode();
- 从头遍历节点,没遍历一个节点就将其取出,放在reversehead 的最前端
- head.next = reverseHead.next
public static void reverseList(HeroNode head){
if(head.next == null || head.next.next == null){
return;
}
HeroNode cur = head.next;
HeroNode next = null;
HeroNode reverseHead = new HeroNode(0,"","");
while(cur != null){
next = cur.next;
cur.next = reverseHead.next;
reverseHead.next = cur;
cur = next;
}
head.next = reverseHead.next;
}