24、两两交换链表中的节点

思路:

使用一个虚拟节点dummy,其next指针指向头节点:

struct ListNode dummy;
dummy.next = head;

定义三个ListNode*指针:pre、cur、next

举例说明:1->2->3->4

通过创建虚拟节点dummy,链表为 0->1->2->3->4

初始:
pre = dummy(0),cur = head(1), next = cur->next(2)
即:pre(0)->cur(1)->next(2)

交换过程:

pre ->next = next; : 0 -> 2
cur ->next = next->next; : 1 -> 3
next->next = cur; : 2 -> 1
更新后的链表为 0->2->1->3->4

更新指针:pre = cur(值为1),cur = cur->next(值为3),next = cur->next(值为4)

重复交换过程。。。

终止条件:
cur == NULL

要判断的条件:
cur 不为空时才进行 next = cur->next
交换过程中当next 不为空时才进行 cur ->next = next->next

返回值:dummy.next

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* swapPairs(struct ListNode* head){
        struct ListNode dummy;
        struct ListNode* pre = &dummy;
        dummy.next = head;
        
        struct ListNode* cur = head;
        
        while( cur != NULL) 
        {
            struct ListNode* next = cur->next;  
            if(next == NULL)
                break;
            
            pre -> next = next;
            cur -> next = next -> next;
            next-> next = cur;
    
            pre = cur;
            cur = cur -> next; 
        }
        
        return dummy.next;

}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • goodbyfan阅读 220评论 0 6
  • 996?!值得24247都没问题!跟鬼扯呢?! 红口白牙,站着说话不嫌腰疼! 欺负人家养家糊口不敢辞职! 知道工作...
    薇安的天空阅读 301评论 5 2
  • 雨,就像包月了似的,一下就是整整十几天了。 难得,今天的天气小雨转晴,但心情确是阴转小雨。单位又一男同胞把自己“嫁...
    singularone旅行阅读 125评论 0 0
  • 今天早上5点半闹钟响了,我叫儿子,他应了一声又睡着了,等6点10来分又叫他,他起来把被子叠起来洗了脸就过来要...
    牛琴阅读 313评论 2 2

友情链接更多精彩内容