题目:
解法:
思路:
- 使用双指针
- cru:一个指向链表的头
- pre:一个指向 null(意味新链表的头)
- 先使用一个临时节点,存储 cru 的下一个节点
- 再改变 cru 的下一个节点,使它指向 pre
- 移动 pre ,使 pre = cru,即让 pre 仍指向新链表的头部节点
- 改变 cru,使 cru = 原来提前存出来的临时节点,即让其指向旧链表的头节点
代码:
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode pre = null; //新链表头结点
ListNode cru = head; //旧链表头结点
while(cru != null){ //旧链表还没遍历完
ListNode temp = cru.next; //存下cru指向的下一结点信息
cru.next = pre; //将当前结点加入新链表
pre = cru; //移动新链表头指针,使其仍指向新链表的头部
cru = temp; //使已经指向新链表头部的cru,回归到旧链表头部
}
return pre;
}
}