高学平的网络日志

  • 编程语言
    • PHP服务器脚本
    • Java编程语言
    • Python程序设计
  • 移动开发
    • Android开发
    • IOS开发
  • 架构运维
  • 数据库技术
  • 前端设计
  • 胡言乱语
  • AI
  • 关于我

单向链表反转迭代算法实现

  • Blackford
  • 2018-11-12
  • 0

1 首先创建一个链表

package com.alibaba.LinkedNode;

/**
 * Created by think.
 * Date: 12/11/2018
 * Time: 13:06
 */
public class Node {
    //数据域
    private int date;
    //指针域
    private Node next;

    public Node(int date) {
        this.date = date;
    }

    public int getDate() {
        return date;
    }

    public void setDate(int date) {
        this.date = date;
    }

    public Node getNext() {
        return next;
    }

    public void setNext(Node next) {
        this.next = next;
    }
}

然后从最后一个节点开始反转:

package com.alibaba.LinkedNode;

/**
 * Created by think.
 * Date: 12/11/2018
 * Time: 13:10
 */
public class Test {
    public static void main(String[] args) {
        Node head = new Node(0);
        Node node1 = new Node(1);
        Node node2 = new Node(2);
        Node node3 = new Node(3);

        head.setNext(node1);
        node1.setNext(node2);
        node2.setNext(node3);

        Node h = head;
        System.out.println("反转前的节点");
        while (h != null) {
            System.out.println(h.getDate() + " ");
            h = h.getNext();
        }

        System.out.println("反转后的节点");
        head = reverse(head);
        while (head != null) {
            System.out.println(head.getDate() + "");
            head = head.getNext();
        }
    }

    public static Node reverse(Node head) {
        // head为上一节点,如果为空链或者当前节点在尾节点,则直接返回
        if (head == null || head.getNext() == null) {
            return head;
        }

        Node reverseHead = reverse(head.getNext());
        //将当前节点的指针域指向前一节点
        head.getNext().setNext(head);
        //将前一节点的指针域设置为null
        head.setNext(null);
        return reverseHead;
    }
}

© 2023 高学平的网络日志
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}