劍指offer系列 反轉鍊錶

2021-07-11 01:39:01 字數 1466 閱讀 4523

題目描述:

給定乙個單鏈表的頭節點,反轉該鍊錶,並返回反轉後的頭節點  

分析:

從鍊錶頭部開始向後遍歷,注意每次要儲存待反轉節點的prev和next節點

**:

listnode* reverselist(listnode* head) 

return p;

}

(其中1 ≤ m ≤ n ≤ list.len)

示例:

給定的單鏈表為:1->2->3->4->5->null, m = 2 and n = 4,

反轉後的鍊錶為:1->4->3->2->5->null.

**:

listnode* reversebetween(listnode* head, int

m, int n)

listnode *newhead=new listnode(0); //新建乙個頭部,防止頭部節點被反轉後資訊丟失

newhead->next=head;

head=newhead;

int i=1;

while((i++)listnode *p=head->next;

listnode *q=p->next,*t=p;

while((i++)<=n)

head->next=t;

return newhead->next;

}

2、判斷乙個單鏈表中元素的值能否形成回文 (leetcode 234)

示例:

如果鍊錶為:1->2->3->4->5->null,則不是回文,返回false

如果鍊錶為:1->2->3->2->1->null,則是回文,返回true

分析:

首先找到鍊錶的中間節點,然後對後半部分鍊錶進行反轉。

再對兩部分鍊錶中的元素值進行比對,判斷是否形成回文。

**:

bool ispalindrome(listnode * head)    

//快慢指標法,尋找鍊錶中間節點

listnode * slow, *fast;

slow = fast = head;

while (fast && fast->next)

if (fast) else

while (slow)

slow = slow->next;

head = head->next;

} return

true;

}

劍指offer系列 15 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。解法1 借助資料結構,陣列,棧來反轉鍊錶。思路1 借助陣列,反轉鍊錶 public listnode reverselist listnode head listnode p head arraylist list newarraylist 遍歷鍊錶,入陣...

劍指offer 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。方法1 將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。方法2 使用三個指標遍歷單鏈表,逐個鏈結點進行反轉。方法3 從第2個節點到第n個節點,依次逐節點插入到第1個節點 head節點 之後,最後將第乙個節點挪到新錶的表尾。public class l...

劍指offer 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。1.非遞迴 struct listnode class solution listnode ppre null listnode p phead listnode pnext null while p null else p pnext return p...