java 单链表反转 递归法 遍历法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/CNZYYH/article/details/82998823

以下是一个例子

package com.haha.demo.util;

public class node {

	static class Node {
		Integer data;
		Node next;
	}

	static Node readyNode() {
		Node linkNode1 = new Node();
		linkNode1.data = 1;
		Node linkNode2 = new Node();
		linkNode2.data = 2;
		Node linkNode3 = new Node();
		linkNode3.data = 3;
		Node linkNode4 = new Node();
		linkNode4.data = 4;
		Node linkNode5 = new Node();
		linkNode5.data = 5;
		Node linkNode6 = new Node();
		linkNode6.data = 6;
		linkNode1.next = linkNode2;
		linkNode2.next = linkNode3;
		linkNode3.next = linkNode4;
		linkNode4.next = linkNode5;
		linkNode5.next = linkNode6;
		return linkNode1;
	}

	/**
	 * 递归法单链表反转
	 * @param node
	 * @return
	 */
	static Node reverseLinkedList(Node node) {
		if (node == null || node.next == null) {
			return node;
		} else {
			Node headNode = reverseLinkedList(node.next);
			node.next.next = node;
			node.next = null;
			return headNode;
		}
	}

	/**
	 * 遍历法单链表反转
	 * @param node
	 * @return
	 */
	static Node reverseBlLinkedList(Node node) {
		Node previousNode = null; //前驱节点
		Node currentNode = node;  //当前节点
		Node headNode = null;
		while (currentNode != null) {
			Node nextNode = currentNode.next;
			if (nextNode == null) {
				headNode = currentNode;
			}
			currentNode.next = previousNode;
			previousNode = currentNode;
			currentNode = nextNode;
		}
		return headNode;
	}

	public static void main(String [] args){
		//顺序法链表反转
		Node kk = readyNode();
		Node gg = reverseBlLinkedList(kk);
		System.out.println("反转完毕");


		//递归法链表反转
//		Node kk = readyNode();
//		Node gg = reverseLinkedList(kk);
//		System.out.println(12312);
	}



}

猜你喜欢

转载自blog.csdn.net/CNZYYH/article/details/82998823
今日推荐