/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func deleteDuplicates(head *ListNode) *ListNode{
if head==nil||head.Next==nil{
return nil
}
for head!=nil&&head.Next!=nil{
if head.Val==head.Next.Val{
head.Next=head.Next.Next
}else{
head=head.Next
}
return head
}
return nil
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func deleteDuplicates(head *ListNode) *ListNode {
if head==nil||head.Next==nil{
return nil
}
cur:=head
for cur!=nil&&cur.Next!=nil{
if cur.Val==cur.Next.Val{
cur.Next=cur.Next.Next
}else{
cur=cur.Next
}
}
return head
}
83、有递归和非递归两种方法,第一种方法不能处理倒数两个数为重复元素,经过查找找到了用cur指针复制,没有找原因。
在测试用例为[1]时,返回nil是错误的,应该直接返回head节点
head是头结点,cur是引进的指针
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func deleteDuplicates(head *ListNode) *ListNode {
if head==nil||head.Next==nil{
return head
}
if head.Val == head.Next.Val {
return deleteDuplicates(head.Next);
} else {
head.Next = deleteDuplicates(head.Next);
}
return head
}
采用递归算法不需要引进指针,两种方法的内存消耗相差无几,但是递归的执行用时是非递归的二分之一
有疑问加站长微信联系(非本文作者)