일반적인 질문의 단일 목록 네 펜 (Java 버전)

단일 연결리스트에서 활성 노드의 수

아이디어의 분석 :

리드는 노드의 목록 인 경우, 노드는 통계를 머리 할 필요가 없습니다. 즉, 목록의 길이입니다.

  1. 프로세스가 직접 0 반환 비어있는 경우 목록이 비어 있는지 여부를 결정하는 단계;
  2. 가변 길이, 노드에 대한 레코드의 수를 감안할 때,
  3. 헤드 노드의 다음 위치에 빈 임시 변수를 가리키는으로하지 않습니다
  4. 한 데이터가 비어 길이 더하기 하나는 아니므로, 링크 된 목록을 트래버스. 빈 날짜의 다음 온도까지.
  5. 변수 반환

코드 구현 :

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)

  1. 첫 번째 목록이 비어, 비어있는 경우는 null 여부를 결정;
  2. 총 길이는 첫 번째 횡단,리스트의 출력이 비어 있지
  3. 임시 변수 임시 조작을 이송하는 데 사용되는 설정 온도는 헤드의 시작부터 선두 노드는
  4. 리스트를 기억하는 길이 크기를 정의한다;
  5. 언제 까지나 임시가 비어 있지으로, 크기는 목록의 전체 통과 할 때까지 증가
  6. 정당성 판정 지표리스트의 전체 길이보다 작거나 큰 0이 아닌
  7. 그리고 시간의 크기 인덱스로 재순환, 대상 점 온도의 위치;
  8. 반환 노드

코드 구현 :

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;
}

단일 연결리스트 반전

아이디어의 분석 :

  1. 새로운 헤더 노드, reverseHead 정의
  2. 원래 목록 꺼내어, 횡단 각 노드의 처음부터 끝까지 통과하려면 reverseHead 노드를 다시 넣어
  3. 원래 머리 다음 내용 포인트 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 : 스택 스택

아이디어의 분석 :

스택의 고급 기능의 사용은, 각각의 노드는 스택에 압입되고, 그 반전 인쇄의 효과를 달성하기 위해 상기 스택을 사용

  1. 먼저 주어진 목록이 비어, 비어 직접 반환 여부를 결정
  2. 비어 있지 않은 목록 트래버스 임시 변수를 정의하는 스택을 생성, 노드는 밀어 버린다
  3. 스택이 비어 있지 않은 한, 마지막 아웃) (팝 팝

코드 구현 :

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());
    }
}

추천

출처www.cnblogs.com/benjieqiang/p/11355870.html