【LintCode】 Reverse Linked List 翻转链表

来源:互联网 发布:知乎马前卒是谁 编辑:程序博客网 时间:2024/05/16 09:32

翻转一个链表

样例
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null

挑战
在原地一次翻转完成

思路:
1、建一个新的头指针,将旧链表从头向尾拆卸,拆下来的节点插入新链表的头部。
2、(这个应该是原地)
1->2->3->4->null
2->1->3->4->null
3->2->1->4->null
4->3->2->1->null

/** * 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) {        if(null == head || null == head.next) return head;        ListNode p = head, q = head;//q指向逆序部分头节点,p指向逆序部分尾节点,p.next为顺序部分头结点        while(p.next != null) {            head = p.next;            p.next = head.next;            head.next = q;            q = head;        }        return head;    }}
0 0
原创粉丝点击