单链表逆置,就是将节点a1,a2…an转变成an,an-1…a1,并且要求使用原来链表的空间,空间复杂度要求为O(1)。
逆置单链表至少需要两个辅助节点p,q,并且利用头结点head。p用来遍历单链表,q用来记录当前节点,head记录前一节点。通过这三个节点,就能实现单链表的逆置。
p与q在每次循环前应指向同一节点,head指向p,q的前一节点。
代码如下:
public Node verse (Node head){
Node p = null;
Node q = null;
//将p,q设为同一节点
p = head.getnext();
if(p==null)
{
return head;
}
q = p;
//将head初始化为空
head = null;
while(p!=null)
{
//通过p节点遍历链表
p = p.getnext();
//q节点把当前节点的后置节点设为自己前一个节点
q.setnext(head);
//head后移一个节点
head = q;
//q后移一个节点
q = p;
}
Node newhead = new Node();
newhead.setnext(head);
//返回一个新的head值,如果单链表为一个节点,返回原head,如果为2个或2个以上的节点,返回逆置以后的头结点。
return newhead;
}
单链表逆置的关键点在于
p用来遍历单链表,q用来记录当前节点,head记录前一节点。
p用来遍历单链表,q用来记录当前节点,head记录前一节点。
p用来遍历单链表,q用来记录当前节点,head记录前一节点。
p与q在每次循环前应指向同一节点,head指向p,q的前一节点。
p与q在每次循环前应指向同一节点,head指向p,q的前一节点。
p与q在每次循环前应指向同一节点,head指向p,q的前一节点。
重要的事情说三遍!~~