场景描述
C语言实现
初步思路
很容易想到,只需要将奇数结点相连成一链表,偶数结点相连成一个链表,最后将偶数链表续到奇数链表尾即可。设立oddCurrent,evenCurrent两指针分别代表当前的奇数结点和偶数结点,分别初始化为链表的第一个结点和第二个结点。想要将奇结点链接,将oddCurrent->next指向下下个结点即可,也就是此时的evenCurrent->next指向的结点(因为奇数结点后一个结点就是偶数结点)。完成这一步之后,oddCurrent后移,类似的evenCurrent也进行类似的操作直至链表末尾。以上操作通过画图辅助会很好理解。
具体细节
总体思路较为简单,实际上,仔细分析会发现有很多细节需要注意。在这里,非常容易造成空指针的错误使用。需要重点注意的是退出循环(也就是循环条件的设立)时尤其要避免空指针的非法使用;以及当链表为空或者只有一个结点时,需不需要另外做特殊操作。
代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* oddEvenList(struct ListNode* head){
if(