注:此文原创,转载注明出处
面试常见算法之—反转链表
单链表置逆是面试中常见的算法之一,很简单,想用最简洁最通俗易懂的方式描述下这个算法,希望大家在面试中思路清晰,半分钟秒杀它
思路:以单链表有4个节点为例,1->2->3->4
反转就是取2,放到1前面;继续取3放到2前面,取4放到3前面。注意取是指的next指针指向它,链表的内存空间不是连续的,我们要做的就是把next指的对象变一变。
用一个tail指针指向第一个节点(因为它后面的最后都会跑到它前面),让这个指针指向的对象始终不变,让tail.next不断调整,依次指向后面。
cur指针指向当前节点,要做的就是把cur 逻辑前移(比如 cur==2,要移到1前面,1和3链起来;3要移到2前面,把1和4链起来;4要移到最前面,1.next=null,置逆完成)
head指向 调整之后的链表头,最后指在了4
代码如下:
public class Node{
public int value;
public Node next;
public Node(int data){
this.value=data;
}
}
public Node reverseList(Node head){
Node tail=head;
Node cur=null;
while(tail.next!=null){
cur=tail.next;
tail.next=cur.next;
cur.next=head;
head=cur;
}
return head;
}
以上仅仅是我的思路,仅供参考,有问题请留言