LeedCode种有关链表List题目总结二

来源:互联网 发布:加工贸易方式数据 编辑:程序博客网 时间:2024/06/03 19:22

9.Remove Linked List Elements(给定一个值,删除该链表中所有该值的节点)
思路1:这道题很简单。我的第一反应是先考虑第一个节点的值是不是给定的value,如果是,head = head.next,直到找到第一个不为value的节点,之后再开始标记前驱节点和后面的节点,直接判断值是否为value,若是是则删除,不是下一个。但这个不太好的一点就得分成两部分来写,一部分是找到第一个不为value的节点,后面一部分是统一写删除操作。

思路2: 为了改善思路一中的缺陷,我们为了统一算法,可以在链表的头部加一个节点,这样是不是就完美的解决了呢。

10.Odd Even Linked List(将链表中第偶数个节点连接在所有奇数节点的后面)例子如下。
输入: 1->2->3->4->5->6->null
输出:1->3->5->2->4->6->null

思路1:先将一个指针遍历到最后一个节点上,定为尾指针。接着从头指针开始,依次将第偶数个指针处的节点链接到尾部,移动尾部指针。在这里注意的是总的指针个数为偶数还是奇数。用另一个指针标记是否遍历结束。

思路2:上面的办法显然不够巧妙直接。我们可以先把所有第奇数个节点链接在一起,所有第偶数个节点链接在一起,最后将偶数的头结点链接在奇数的尾节点之后即可。代码如下:

    ListNode first = head;    ListNode secode = head.next;    ListNode temp = secode;    while(secode != null && secode.next != null){        first.next = secode.next;        first = first.next;        secode.next = first.next;        secode = secode.next;    }    first.next = temp;    return head;
0 0
原创粉丝点击