206 反转链表?
示例:
输入: 1->2->3->4->5
输出: 5->4->3->2->1
思路:
1、定义指针pre 和cur 指针,pre 指针用来指向前驱节点,cur 指针用来遍历整个链表,初始化pre = null ,cur = head 。 2、首先用一个临时节点tmp保存cur指针节点的后继节点(ListNode tmp= curr.next;) ,然后让cur指针节点的next指针指向其前驱节点(cur.next = pre),最后pre指针和cur指针分别后移一位(prev = curr;? curr = next;)
3、重复上述过程,直到cur指向空节点。
4、最后返回pre节点。
(动图来自网络)?
class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while(cur != null)
{
ListNode tmp = cur.next; //tmp保留cur的后继节点
cur.next = pre; //cur指向前驱节点
pre = cur; //pre和cur节点前进一位
cur = tmp;
}
return pre; //最后返回pre
}
}
|