BM2 链表内指定区间反转
生活随笔
收集整理的這篇文章主要介紹了
BM2 链表内指定区间反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
描述
將一個節點數為 size 鏈表 m?位置到?n 位置之間的區間反轉,要求時間復雜度?O(n)O(n),空間復雜度?O(1)O(1)。
例如:
給出的鏈表為 1→2→3→4→5→NULL,?m=2,n=4m=2,n=4,
返回 1→4→3→2→5→NULL.
?
數據范圍: 鏈表長度 0 < size \le 10000<size≤1000,0 < m \le n \le size0<m≤n≤size,鏈表中每個節點的值滿足 |val| \le 1000∣val∣≤1000
要求:時間復雜度 O(n)O(n) ,空間復雜度 O(n)O(n)
進階:時間復雜度 O(n)O(n),空間復雜度 O(1)O(1)
示例1
輸入:
{1,2,3,4,5},2,4返回值:
{1,4,3,2,5}示例2
輸入:
{5},1,1返回值:
{5} /*** struct ListNode {* int val;* struct ListNode *next;* };** C語言聲明定義全局變量請加上static,防止重復定義*/ /*** 代碼中的類名、方法名、參數名已經指定,請勿修改,直接返回方法規定的值即可** * @param head ListNode類 * @param m int整型 * @param n int整型 * @return ListNode類*/ struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {// write code herestruct ListNode* t;struct ListNode* new;struct ListNode* mi;struct ListNode* pre=NULL;struct ListNode* pro;if(m==n){return head;}else{ //總共分為三部分:m之前的頭和尾,[m,n]的逆轉后的頭和尾,n之后的頭t=head; //保存表頭for(int j=0;j<m-1;j++){ //m大于1的時候pre=head; //指向m-1的節點,m不為1head=head->next;}//此時head是指向m節點的mi=head; //逆序后的子表尾第n個節點for(int i=m;i<=n;i++){new=head->next;head->next=pro;pro=head; //指向逆序后的子表頭head=new; //指向n+1個節點} mi->next=head;if(pre!=NULL)pre->next=pro;else //如果為空,則m從第一個位置開始t=pro; return t;} }總結
以上是生活随笔為你收集整理的BM2 链表内指定区间反转的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 修改记录功能--jsp,servlet
- 下一篇: 登录验证---过滤器(Fileter)