您的位置:首页 > 其它

链表基础之翻转,删除

2017-04-12 10:41 513 查看

翻转链表

给出一个链表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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐