解题思路一:(C#)
生成一个新指针指向头结点遍历整个链表,当指针的下一个结点不为空的时候循环判断,若该结点元素和下一个结点元素相等,将下下一个结点元素覆盖到下一个结点上,若不相等,则将指针移向下一个结点进行下一轮判断循环。
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode DeleteDuplicates(ListNode head) {
ListNode temp=head;
if(temp==null)
return head;
while(temp.next!=null)
{
if(temp.val==temp.next.val)
temp.next=temp.next.next;
else
temp=temp.next;
}
return head;
}
}
解题思路二:(Cpp)
遍历链表,分别比较当前节点和下一个节点val是否相等。相等的话删除下一个节点,当前节点不变;不相等的话不删除下一个节点,下一个节点变为当前节点。直到碰到当前节点的next成员为NULL时跳出循环,返回链表。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (head == NULL)
{
return head;
}
ListNode* currentNode = head;
ListNode* nextNode = NULL;
while (currentNode->next != NULL)
{
nextNode = currentNode->next;
if (currentNode->val == nextNode->val)
{
currentNode->next = nextNode->next;
}
else
{
currentNode = nextNode;
}
}
return head;
}
};