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; }}