方法一:中間結點。
不論連標的長度是奇數還是偶數,鍊錶的中間節點(奇數),或者鍊錶的中間節點的第二個(偶數)都是中間節點
class
solution
return len;
}//返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。
public listnode middlenode
(listnode head)
return node;
}}
方法二:
1.定義兩個引用fast和slow,初值均等於head,fast走兩步(走完第一步之後,記得判斷fast是否為空,為空跳出,不為空繼續下一步),slow走一步,當
2.fast為null時,slow剛好到達中間節點。
class
solution
slow = slow.next;
fast = fast.next;
}return slow;
}}
1.先求出鍊錶的長度,鍊錶的倒數第k個即為正數第length-k,只要從鍊錶的head開始找到並輸出其length-k個節點即可
2.分情況即:lengthk;length=k
方法一:
public
class
solution
//lengthif
(len < k)
//length>=k
int steps = len - k;
listnode r = head;
for(
int i =
0; i < steps; i++
)return r;
}}
方法二:
front先走k步,在和bank一起往後走,這樣front的bank之間相差k,當front為null時,bank正好指向倒數第k個。
public
class
solution
front = front.next;
}//讓front和bank一起向後走,結束之後bank就正好時倒數第k個位置
while
(front != null)
return back;
}}
1.找到中間的節點
2.fast和slow都指向head,當fast向後走兩步時,slow向後走一步,這樣一次往後,知道fast為null時,slow剛好是中間節點
3.將鍊錶中間的後半段逆置此時head=slow
4.將逆置的後半段鍊錶與原鍊錶從頭開始比較,如果有乙個不相等,則不是回文鍊錶,否則當逆置的後半段執行到null時都相等,則是回文
public
class
palindromelist
fast = fast.next;
slow = slow.next;
}return slow;
}//將鍊錶中間的後半段逆置此時head=slow
public listnode reverse
(listnode head)
return result;
}//主方法
//將逆置的後半段鍊錶與原鍊錶從頭開始比較,如果有乙個不相等,則不是回文鍊錶,否則當逆置的後半段執行到null時都相等,則是回文
public
boolean
chkpalindrome
(listnode a)
n1 = n1.next;
n2 = n2.next;
}return
true;}
}
1.建立三個引用,prev,p1,p2,prev用來做前驅,p1為連標的head,p2為鍊錶的head.next,比較p1和p2是否相等,不想等的話,prev,p1,p2均往後走一步
2.如果相等p1,prev均保持不變,p2往後走一步,繼續和p1判斷,直到p2和p1不想等,結束迴圈,將prev.next=p2,p1=p2,p2=p2.next
3.直到p2=null,結束整個迴圈
public
class
solution
//不為null,執行
listnode prev = null;
listnode p1 = phead;
listnode p2 = phead.next;
//判斷p1,p2是否相等
while
(p2 != null)
else
//如果鍊錶的p1=head時就和p2相等,此時prev為null,直接prev.next = p2回報錯,所以分情況討論
if(prev == null)
else
p1 = p2;
if(p2 != null)}}
return phead;
}}
4 5 2 7 6 3 8 1====>4 2 3 1 5 7 6 8
2.新建兩個鍊錶,乙個用來存放小於x的所有節點,乙個乙個用來存放大於x的所有節點
3.分情況考慮:沒有小於x的節點;沒有大於x的節點;兩者都有;
class
listnode
//構造方法過載
public
listnode
(int val)
}//以給定值x為基準將鍊錶分割成兩部分,所有小於x的結點排在大於或等於x的結點之前 。
public
class
linkedlistinterview
else
send = cur;
}else
else
bend = cur;}}
//沒有小於x的節點
if(send == null)
//沒有大於x的節點
send.next = bhead;
if(bend != null)
return shead;
}//建立鍊錶
private
static listnode createtestlist()
//輸出改變之後的鍊錶
public
static
void
main
(string[
] args)}}
}
C語言之實際問題 指標賦值
c語言之實際問題 指標賦值 const u8 testbuf 20 void fun u8 mode u8 ptbuf 0 switch mode case 1 ptbuf testbuf printf ptbuf break case 2 ptbuf 0 1 ptbuf 1 1 printf pt...
工作中實際問題
1.資料庫分布式問題,session 問題 使用者登入時,需要產生乙個sessionid 來判斷是否為同一使用者。當跨服務訪問時,其他伺服器如何判斷該使用者是否已經登入?借用redis 技術。把 sessionid 作為乙個標記存入 redis 中,實現資料共享,讓多個伺服器共同呼叫。如何設定有效時...
用程式設計解決實際問題
在現實程式設計中,如果我們遇到了已經學過的演算法不適合解決的問題,該怎麼辦?其實很簡單,就是把控制流程和資料結構想清楚,然後用 實現就好了!在本章內我們就來看兩個例子。題目內容 這些錢及其理財收益僅僅用於你個人的日常生活消費 不買房 不買車 不置產,不用於大病 也不包括結婚生子的費用,只用來過日子。...