各位大大好,這是我的作業,可是做一半有瓶頸,想請教大家
題目:
有個linklist=head,會宣告left和right
left和right中間的數字會反轉
例如:
1->2->3->4->5 left=2, right=4
答案:
1->4->3->2->5
我的程式碼:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseBetween(ListNode head, int left, int right) {
ListNode fir=null;
ListNode cur=head;
int i=1;
while(cur!=null){//
if(left>i){
fir=cur;
cur=cur.next;
fir.next=cur;
i++;
System.out.println(fir.val);
}
else{break;}
}
ListNode next=null;
ListNode pre=null;
while(cur!=null){
if(left<=i && right>=i){
next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
i++;
}
else{break;}
}
ListNode tail=null;
while(cur!=null){
tail=cur;
cur=cur.next;
tail.next=cur;
}
pre.next=tail;
fir.next=pre;
return fir;
}
}
我跑出來都會變1->4->5
是為什麼呢,謝謝
我不是寫java,但C#其實差不多
在接觸這種有節點的題目,我通常都會往遞迴的方向去思考
這是我用C#的寫法
public ListNode reverseBetween(ListNode head, int left, int right)
{
//目前節點的反轉判斷,若為空值表示終點直接返回
if (head == null) return head;
int currentVal = head.val;
if (currentVal == left) head.val = right;
if (currentVal == right) head.val = left;
//下一個節點進行一次反轉方法判斷到終點,再把結果回傳
head.next = reverseBetween(head.next,left,right);
return head;
}
參考這篇
另外我想了解一下
這是幾年級的作業