实现单链表的反转:
1)栈实现:链表压入栈中,依次弹出,顺序反转。时间复杂度O(n),空间复杂度O(n);
2)借用三个指针:三个指针,前两个用来反转节点指向,第三个记录后一个节点,遍历整个链表,时间复杂度O(n),空间复杂度O(1)
//返回一个实现了反转的链头
public static LinkNode reverseLink(LinkNode pNode){
//定义三个指针,第一个和第二个指针用来交换指向(即反转),
//第三个指针记录下一个指针
LinkNode first=pNode;
LinkNode secend=pNode.nextNode;
LinkNode third=null;
while(secend!=null){
third=secend.nextNode;
secend.nextNode=first;
first=secend;
secend=third;
}
pNode.nextNode=null;
return first;
}