package jxau.lyx.link;
/**
*
* @author: liyixiang
* @data:2014-10-1
* @题目大意:
* 链表转置
* @主要思路:
* 从头到尾遍历原链表,每遍历一个结点,将其摘下放在新链表的最前端。
* 注意链表为空和只有一个结点的情况。
* @时间复杂度:
* 时间复杂度为O(n)
* @空间复杂度:
*/
public class ReverseLink {
//结点
private static class Node {
int val;
Node next;
public Node(int val) {
this.val = val;
}
}
public Node reverseLink(Node head){
//如果链表为空或只有一个节点,无需反转,直接返回原链表表头
if(head == null || head.next == null){
return head;
}
Node reHead = null; //反转后新链表指针
Node cur = head;
while(cur != null){
Node preCur = cur; // 用preCur保存住对要处理节点的引用
cur = cur.next; // cur更新到下一个节点
preCur.next = reHead; // 更新要处理节点的next引用
reHead = preCur; // reHead指向要处理节点的前一个节点
}
return reHead;
}
}
转载于:https://my.oschina.net/liyixiangBlog/blog/323869