数据结构与算法4:单链表反转

简介

链表反转就是由原本的顺序指向变为逆序指向,例链表:a->b->c ,经过反转后改链表为c->b->a。实现的方法比较多,我这里给出一个时间复杂度为O(n),空间复杂度为O(1)的算法。

代码实现

public Node reverseLinkedList(Node head){
	if(head==null&&head.next==null){
		return head;
	}
	Node preHead = null;
	Node nextHead = null;
	while(head!=null){
		nextHead = head.next;
		head.next = preHead;
		preHead = head;
		head = nextHead;
	}
	return preHead;
}

分析

  1. 方法传入head 参数,若head为空或者长度为1,就直接返回。
  2. 引两个临时变量表示head前后节点。
  3. 外层while循环通过head.next判断是否继续执行。因为这是一个head逐步从头部到尾部的迁移的过程。
  4. nextHead 临时存储原head.next。
  5. 原head的next指向preHead,preHead储存原head,这两步是实现反转的关键所在,每执行着两步一次,preHead所在链表就会被插入一个新元素。
  6. 新的head被赋予原head.next,这就是head向后迁移一步当过程。
  7. 经过外层循环控制得到最后的反转链表

数据结构与算法4:单链表反转_第1张图片

你可能感兴趣的:(数据结构与算法)