反轉鏈表
描述
定義一個函數,輸入一個鏈表的頭節點,反轉該鏈表並輸出反轉後鏈表的頭節點。
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
限制:
0 <= 節點個數 <= 5000
class Solution {
public:
ListNode *reverseList(struct ListNode* head) {
struct ListNode *newHead = NULL;
struct ListNode *node;
while (head != NULL) {
//1. 對之前的鏈表做頭刪
node = head;
head = head->next;
//2. 對新鏈表做頭插
node->next = newHead;
newHead = node;
}
return newHead;
}
};
合併兩個排序的鏈表
描述
輸入兩個遞增排序的鏈表,合併這兩個鏈表並使新鏈表中的節點仍然是遞增排序的。
示例1:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
限制:0 <= 鏈表長度 <= 1000
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
ListNode *pHead = new ListNode(0);
ListNode *p = pHead;
while(pHead1 != NULL && pHead2 != NULL)
{
if(pHead1->val < pHead2->val)
{
p->next = pHead1;
pHead1 = pHead1->next;
}
else
{
p->next = pHead2;
pHead2 = pHead2->next;
}
p = p->next;
}
if(pHead1 != NULL)
{
p->next = pHead1;
}
if(pHead2 != NULL)
{
p->next = pHead2;
}
return pHead->next;
}