解析:(操作指针)
题目要求:反转一个链表。
整体思路是:从前到后,将结点next的指向,从指向后一个元素改为指向前一个元素。
pre指向当前结点的前一个结点,cur指向当前结点,tmp指向当前结点的后一个结点。
先将cur.next指向pre,再将pre,cur向后移一位。tmp存在的意义就是为cur记录其下后一个结点的位置,在转换指针后,cur.next不再指向后一个结点。所以当cur需要后移的时候,就需要用到tmp对cur进行赋值。
以上这样做的好处是,不需要创建一段新的存储空间来存放新链表或者所有元素,节省了存储空间。
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null, cur = head, tmp;
while (cur != null) {
tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}
该文介绍了如何反转一个链表,通过定义三个指针pre、cur和tmp,不使用额外存储空间,依次调整节点的next指针使其指向前一个节点,从而达到反转链表的目的。
456

被折叠的 条评论
为什么被折叠?



