翻转链表
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: The new head of reversed linked list.
*/
ListNode *reverse(ListNode *head) {
// write your code here
ListNode* pre = NULL;
while(head != NULL){
ListNode* temp = head ->next;
head ->next = pre;
pre = head;
head = temp;
}
return pre;
}
};
链表删除重复的结点,留下唯一一个相同结点
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given1->1->2, return1->2.
Given1->1->2->3->3, return1->2->3.
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
if (head == NULL) return head;
ListNode* pHead = head;
while(pHead != NULL){
while(pHead ->next != NULL && pHead ->val == pHead ->next ->val){
pHead ->next = pHead ->next ->next;
}
pHead = pHead ->next;
}
return head;
}
};
删除全部相同的链表结点
- 这个在牛客上超时了。。。如有看出哪里的问题麻烦指教
class Solution {
public:
ListNode *deleteDuplicates(ListNode *head) {
if (head == NULL || head ->next == NULL) return head;
ListNode* dummy = new ListNode(0);
dummy->next = head;
head = dummy; //将头指针前移
while(head ->next != NULL && head ->next ->next != NULL){
if(head ->next ->val == head ->next ->next ->val){//如果两个值相等,记下这个值,删掉所有相同值的结点
int value = head ->next ->val;
while(head->next != NULL && head ->val == value){
head ->next = head ->next ->next;
}
}else{
head = head ->next;
}
}
return dummy ->next;
}
};