链表day2—交换结点

两两交换

  • 核心思想就是加一个虚拟头结点,然后就可以对于所有节点都进行相同的操作了;
  • 设置指针current指向当前结点,初始指向dummyhead,判断结束标志是cur->next == NULL&&cur->neex->next ==NULL(奇数个,则最后一个结点不用交换,偶数个,则最后一个结点的next为空)
  • 需要注意的是循环边界问题,操作往后两个结点,需要指针指向第一个结点的前一个结点,所以一开始cur指向dummyhead,最后返回dummyhead->next,即真正头结点,具体代码如下:
typedef struct ListNode {
    int val;
    struct ListNode* next;
}ListNode;//链表结构体
ListNode* swap(ListNode* head){
    ListNode* dummyhead = (ListNode*)malloc(sizeof(ListNode));
    dummyhead->next = head;
    ListNode* cur = dummyhead;
    while(cur->next&&cur->next->next){
        ListNode* tmp = cur->next;
        ListNode* tmp1 = cur->next->next->next;
        cur->next = cur->next->next;
        cur->next->next = tmp;
        cur->next->next->next = tmp1;
        cur = cur->next->next;
    }
    return dummyhead->next;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值