Reverse Linked List(翻转链表)

问题

Reverse a linked list.
Example
For linked list 1->2->3, the reversed linked list is 3->2->1

链表在C语言中表现的可能更加直接,在Java中被包装起来了。

分析:

现在有三个元素 a->b->c 有一个current变量指向b,需要完成的操作其时是把b的next指向a,然后把current指向c.当current走完整个链表,就可以完成反转操作。
因为a在b的前边,为了能把b指向a,必须有a的指针或者变量.所以我们需要声明一个l变量,表示current的左边即上一个变量.当我们把current的next指向a时,c的指针或者变量处于切断状态,所以需要再声明一个变量r来记录c.
这样每次我们的操作步骤是这样的:

  1. 先把c用r记录下来.
  2. 然后把b的next指向a
  3. 让l记录下current
  4. current指向c

代码

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param head: The head of linked list.
     * @return: The new head of reversed linked list.
     */
    public ListNode reverse(ListNode head) {
        // write your code here
        ListNode l=null;
        ListNode r=null;
        while(head!=null){
            r=head.next;
            head.next=l;
            l=head;
            head=r;
        }
        return l;
    }
}

你可能感兴趣的:(Reverse Linked List(翻转链表))