剑指offer24-反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000

这里给出两种思路,一是双指针头插法建立链表,二是利用递归

双指针

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        newHead=None;
        while head!=None:
            p=head.next
            head.next=newHead
            newHead=head
            head=p
        return newHead

递归

递归函数返回反转后链表的头结点,再将原链表的头结点加入反转链表

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {
    if(!head||!head.next)
        return head;
    let ret=reverseList(head.next);
    head.next.next=head;	//head.next是新链表的尾节点
    head.next=null;	
    return ret;
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章