鍊錶之實際問題2

2021-09-25 14:50:05 字數 3225 閱讀 7487

方法一:中間結點。

不論連標的長度是奇數還是偶數,鍊錶的中間節點(奇數),或者鍊錶的中間節點的第二個(偶數)都是中間節點

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 中,實現資料共享,讓多個伺服器共同呼叫。如何設定有效時...

用程式設計解決實際問題

在現實程式設計中,如果我們遇到了已經學過的演算法不適合解決的問題,該怎麼辦?其實很簡單,就是把控制流程和資料結構想清楚,然後用 實現就好了!在本章內我們就來看兩個例子。題目內容 這些錢及其理財收益僅僅用於你個人的日常生活消費 不買房 不買車 不置產,不用於大病 也不包括結婚生子的費用,只用來過日子。...