단일 연결리스트에서 활성 노드의 수
아이디어의 분석 :
리드는 노드의 목록 인 경우, 노드는 통계를 머리 할 필요가 없습니다. 즉, 목록의 길이입니다.
- 프로세스가 직접 0 반환 비어있는 경우 목록이 비어 있는지 여부를 결정하는 단계;
- 가변 길이, 노드에 대한 레코드의 수를 감안할 때,
- 헤드 노드의 다음 위치에 빈 임시 변수를 가리키는으로하지 않습니다
- 한 데이터가 비어 길이 더하기 하나는 아니므로, 링크 된 목록을 트래버스. 빈 날짜의 다음 온도까지.
- 변수 반환
코드 구현 :
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;
}
하나의 목록에서 상호 k 번째 노드를 찾기
아이디어의 분석 :findLastIndexNode(Node node , int index)
- 첫 번째 목록이 비어, 비어있는 경우는 null 여부를 결정;
- 총 길이는 첫 번째 횡단,리스트의 출력이 비어 있지
- 임시 변수 임시 조작을 이송하는 데 사용되는 설정 온도는 헤드의 시작부터 선두 노드는
- 리스트를 기억하는 길이 크기를 정의한다;
- 언제 까지나 임시가 비어 있지으로, 크기는 목록의 전체 통과 할 때까지 증가
- 정당성 판정 지표리스트의 전체 길이보다 작거나 큰 0이 아닌
- 그리고 시간의 크기 인덱스로 재순환, 대상 점 온도의 위치;
- 반환 노드
코드 구현 :
public HeroNode findLastIndexNode(Node node,int index) {
// 判断链表是否为空,
if (node == null) {
return null;
}
// 不为空,则先进行遍历,输出链表的总长度
// 定以一个临时变量temp用来进行遍历操作,
HeroNode temp = head.next;//从链表头部的下一个开始
// 定义一个size用来存储链表的长度
int size = 0;
while (temp != null) {// temp下一个节点还有值
size++;
temp = temp.next;//指向下一个节点继续
}
System.out.println(size);
// 得到链表的总长度size后,我们只需遍历size-index次即可得到第K个元素
HeroNode cur = head.next;
// 保证输入的index是有效的
if(index <= 0 || index > size){
return null;
}
for(int i = 0; i< size-index;i++){
cur = cur.next;
}
return cur;
}
단일 연결리스트 반전
아이디어의 분석 :
- 새로운 헤더 노드, reverseHead 정의
- 원래 목록 꺼내어, 횡단 각 노드의 처음부터 끝까지 통과하려면 reverseHead 노드를 다시 넣어
- 원래 머리 다음 내용 포인트 reverseHead.next
코드 구현 :
public static void reverseLinkedList(HeroNode node) {
// 1. 判断所给的链表的长度是0或是1不用反转
if(node.next == null || node.next.next == null){
return;
}
//2. 定义一个新的头节点,reverseHead
HeroNode reverseHead = new HeroNode(0,"","");
//3. 从头到尾去遍历原来的链表,每遍历一个节点,将其取出,放到reverseHead节点的后面
HeroNode cur = node.next; // 临时变量用来进行遍历操作
HeroNode next = null; //用来存储当前节点的下一个节点的位置
while(cur != null) {
// 从右往左进行插入,
next = cur.next; //
cur.next = reverseHead.next; // 如果temp此时是节点2,那么reverseHead.next是节点1,我们先让节点2的下一位指向节点1
reverseHead.next = cur; //让新链表的头结点指向取出来的节点。把temp插到reverseHead后面
cur = next; // 继续
}
//4. 将原来的头部.next指向reverseHead.next
node.next = reverseHead.next;
}s
꼬리에서 단일 체인 프린트 헤드
모드 1 : 통과 역
그런 다음 첫 번째 역 순회, 연결리스트 구조를 파괴 할 것이다
모드 2 : 스택 스택
아이디어의 분석 :
스택의 고급 기능의 사용은, 각각의 노드는 스택에 압입되고, 그 반전 인쇄의 효과를 달성하기 위해 상기 스택을 사용
- 먼저 주어진 목록이 비어, 비어 직접 반환 여부를 결정
- 비어 있지 않은 목록 트래버스 임시 변수를 정의하는 스택을 생성, 노드는 밀어 버린다
- 스택이 비어 있지 않은 한, 마지막 아웃) (팝 팝
코드 구현 :
public static void reversePrint2(HeroNode node){
//1.
if(node.next == null){
return;
}
//2.
HeroNode cur = node.next;
Stack<HeroNode> stack = new Stack<HeroNode>();
while(cur != null){
stack.push(cur);
cur = cur.next;
}
// 3.
while(!stack.empty()){ //或者stack.size()>0
System.out.println(stack.pop());
}
}