題目描述:
給定乙個單鏈表的頭節點,反轉該鍊錶,並返回反轉後的頭節點
分析:
從鍊錶頭部開始向後遍歷,注意每次要儲存待反轉節點的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...