劍指offer_15:反轉連結串列
阿新 • • 發佈:2020-11-28
定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
限制:
0 <= 節點個數 <= 5000
1、雙指標
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseList(ListNode head) { if(head==null) return null; ListNode cur=null; ListNode pre=head; while(pre!=null){ ListNode node=pre.next; pre.next=cur; cur=pre; pre=node; } return cur; } }
2、另一種雙指標
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseList(ListNode head) { if(head==null) return null; ListNode cur=head; while(head.next!=null){ ListNode t=head.next.next; head.next.next=cur; cur=head.next; head.next=t; } return cur; } }
3、遞迴
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode reverseList(ListNode head) { if(head==null||head.next==null) return head; ListNode newHead=reverseList(head.next); head.next.next=head; head.next=null; return newHead; } }