单链表的反转

public class javaTest1 {
	
	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);
		Node node4 = new Node(4);
		
		head.setNext(node1);
		node1.setNext(node2);
		node2.setNext(node3);
		node3.setNext(node4);
		
		//打印反转前的单链表
		Node h = head;
		while(null!=h){
			System.out.println(h.getData()+" ");
			h=h.getNext();
		}
		//调用反转的方法
		head = reverse1(head);
		
		System.out.println("\n***************");
		while(null!=head){
			System.out.println(head.getData()+" ");
			head=head.getNext();
		}
		
		
	}
	/**
	 * 遍历,将当前节点的下一个节点缓存后改当前节点指针
	 * @param head
	 * @return
	 */
	public static Node reverse1(Node head){
		if(head==null)
			return head;
		Node pre = head;			//上一结点
		Node cur = head.getNext();	//当前节点
		Node tmp;					//临时结点,用于保存当前节点的指针域(即下一个节点)
		while(cur!=null){			//当前节点为null,说明为尾节点
			tmp = cur.getNext();	
			cur.setNext(pre);		//反转指针域的指向
			pre = cur;
			cur = tmp;
		}
		//最后将原链表的头节点的指针域置为null,还回新链表的头结点,即原链表的尾结点
		head.setNext(null);
		
		return pre;
	}
	
	
	
	
	
	
	static class Node{
		private int Data;			//数据域
		private Node Next;			//指针域
		
		
		public Node(int data) {
			super();
			Data = data;
		}
		public int getData() {
			return Data;
		}
		public void setData(int data) {
			Data = data;
		}
		public Node getNext() {
			return Next;
		}
		public void setNext(Node next) {
			Next = next;
		}
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值