(2)、反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev=null;
ListNode cur=head;
ListNode newHead=null;
while(cur!=null){
ListNode curNext=cur.next;
if(curNext==null){
newHead=cur;
}
cur.next=prev;
prev=cur;
cur=curNext;
}
return newHead;
}
}
反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
示例:
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
https://leetcode-cn.com/problems/reverse-linked-list-ii/
class Solution {
public ListNode reverseBetween(ListNode head, int m, int n) {
ListNode newHead=new ListNode(-1);
newHead.next=head;
ListNode superior=newHead;
for(int i=1;i<m;i++){
superior=superior.next;
}
ListNode prev=null;
ListNode cur=superior.next;
for(int i=m;i<=n;i++){
ListNode curNext=cur.next;
cur.next=prev;
prev=cur;
cur=curNext;
}
superior.next.next=cur;
superior.next=prev;
return newHead.next;
}
}